在iframe中包含jQuery时,Internet Explorer 9(不是早期版本或其他浏览器)出错

inv*_*ear 11 javascript jquery internet-explorer 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;
Run Code Online (Sandbox Code Playgroud)

这是最后一行var jQuery = function( selector, context ) {.

如果我在兼容性视图中没问题,在任何其他浏览器中都没有问题,只有Internet Explorer 9在Internet Explorer 9模式和Internet Explorer 9标准中.如果我忽略错误,我发现使用任何版本的jQuery都没有问题.

怎么了,我能做些什么来解决?

zar*_*har 8

当我从iframe中删除SRC属性并将onOpen事件添加到jQuery的对话框时,问题得到解决:

open: function()
  {
    document.getElementById("mainFrame").src = "/login.aspx";
  }
Run Code Online (Sandbox Code Playgroud)


inv*_*ear 2

天哪,我以为我有最新款的精美盒子。结果我的 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');
Run Code Online (Sandbox Code Playgroud)

其中isIE6评估为:

isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
Run Code Online (Sandbox Code Playgroud)

iframe该代码片段应在从 DOM 中删除之前执行。