在iframe中包含jQuery时,Internet Explorer 9(不是早期版本或其他浏览器)出错
基本上我有一个页面,推出了一个fancybox iframe。 在那个iframe我也包括jQuery。 但是,当我在Internet Explorer 9中测试它时,它给了我错误
行:68 \ n错误:’对象’未定义
此错误位于文件jquery-1.4.1.js
,有问题的行是第二行:
// Save a reference to some core methods toString = Object.prototype.toString, hasOwnProperty = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, indexOf = Array.prototype.indexOf;
这是var jQuery = function( selector, context ) {
的最后一行。
如果我在兼容性视图中没有问题,在任何其他浏览器中都没有问题,只有Internet Explorer 9在Internet Explorer 9模式和Internet Explorer 9标准中。 如果我忽略错误,我发现使用任何版本的jQuery都没有问题。
怎么了,我能做些什么来解决?
当我从iframe中删除SRC属性并将onOpen事件添加到jQuery的对话框时,问题得到解决:
open: function() { document.getElementById("mainFrame").src = "/login.aspx"; }
我有同样的问题,但我的原因是不同的。 我想我会在这里分享,以防其他人和我在同一条船上 – 特别是考虑到我花了大约4个小时追踪……
我们的主页有一个iframe,最终在很短的时间内将src属性改变了两次(我们实际上是偶然加载了两次相同的src – 一次直接在HTML中,然后再次通过JavaScript加载页面)。 我不确定为什么Internet Explorer 9会窒息,但我猜这个框架部分是通过在再次设置src时初始化其脚本,将JavaScript引擎置于不愉快的状态。 无论哪种方式,我很高兴我找到它,因为我们不应该加载框架两次!
然而,Internet Explorer 9死得如此糟糕的真正原因是一个谜。
这是一个相关的问题: 在iframe中加载脚本时,IE9会抛出exception。 为什么?
在iframe的早期(在head部分)加载脚本的某些情况下,Internet Explorer中似乎存在一些真正的问题,其中本地全局对象(例如“Function”和“Object”)未定义。
我在另一个问题上放了一笔赏金以获得更多的关注。
根据经验,我知道这个问题在IE8中也存在,但它似乎更为罕见。 看起来在IE9中它变得更糟……
噢,我以为我有最新的花式盒子。 事实certificate我有1.3.1,1.3.4解决了这个问题。
UPD(sompylasar):事实上,这已在1.3.2中修复(参见更改日志 )。 我已经将1.3.2的源代码与1.3.1进行了比较 ,发现以下差异解决了这个问题:
content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');
isIE6
在isIE6
评估:
isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
在从DOM中删除iframe
之前,应该执行此代码段。