【问题标题】:Error in Internet Explorer 9 (not earlier versions or other browsers) when including jQuery in an iframe在 iframe 中包含 jQuery 时,Internet Explorer 9(不是早期版本或其他浏览器)中的错误
【发布时间】:2011-09-25 14:47:12
【问题描述】:

基本上我有一个页面启动了一个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 都没有问题。

发生了什么事,我可以做些什么来解决?

【问题讨论】:

  • 更新jQuery到最新版本
  • 将 jquery 更新到 1.6.1,现在错误出现在第 81 行,但代码相同 toString = Object.prototype.toString
  • 直接打开iframe的内容会出现这种情况吗?也就是说,如果你只是自己打开 iframe 页面?
  • @jimbojw:不,先生,iframe 中的代码如果加载到它自己的窗口中,则运行不会出错。
  • 我很好奇 iframe 是在设置 src 属性之前还是之后创建的。如果创建了 iframe,并且 /then/ 设置了 src 属性,则可能会出现问题。 (而不是构建一个包含 的 HTML 字符串并将其全部注入到具有 innerHTML 的元素中)。

标签: javascript jquery internet-explorer internet-explorer-9


【解决方案1】:

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

open: function()
  {
    document.getElementById("mainFrame").src = "/login.aspx";
  }

【讨论】:

  • Fancybox 动态创建 iframe。我不知道我怎么能把它融入到这个过程中。
  • 您可以通过 onComplete 事件将此方法与 Fanybox 一起使用。
【解决方案2】:

哦,我以为我有最新的花式盒子。原来我有 1.3.1,1.3.4 修复了这个问题。

UPD(sompylasar):事实上,这在 1.3.2 中已修复(请参阅 changelog)。我将source code of 1.3.21.3.1 进行了比较,发现以下差异可以解决问题:

content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');

isIE6 的计算结果为:

isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,

这个 sn-p 应该在从 DOM 中删除 iframe 之前执行。

【讨论】:

  • 伟大的侦探在 sompylasar 那里工作。事实上,与其更新我的答案,您可能应该将其作为新答案提交,这样您就可以获得应得的赞誉。
【解决方案3】:

我有完全相同的问题,但我的原因不同。我想我会在这里分享,以防其他人和我在同一条船上 - 特别是考虑到我花了大约 4 个小时才找到...

我们的主页有一个 iframe,它的 src 属性在很短的时间内改变了两次(实际上我们偶然加载了两次相同的 src - 一次直接在 HTML 中,然后再次在页面加载时通过 JavaScript )。我不确定为什么 Internet Explorer 9 会阻塞,但我猜测框架部分是通过在再次设置 src 时初始化其脚本,使 JavaScript 引擎进入不愉快的状态。不管怎样,我很高兴我找到了它,因为我们不应该加载框架两次!

但是,Internet Explorer 9 死得这么惨的真正原因是个谜。

【讨论】:

    【解决方案4】:

    这是一个相关问题: IE9 throws exceptions when loading scripts in iframe. Why?

    在 Internet Explorer 中似乎存在一些实际问题,在 iframe 的早期(在头部)加载脚本时,在某些情况下未定义原生全局对象,例如“功能”和“对象”......

    我在另一个问题上悬赏以引起更多关注。

    根据经验,我知道这个问题在 IE8 中也存在,但似乎比较少见。看起来在 IE9 中它变得更糟了......

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2013-09-15
      • 2012-02-07
      • 2012-01-30
      • 2013-07-09
      • 1970-01-01
      • 2014-02-03
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多