【问题标题】:IE9 throws exceptions when loading scripts in iframe. Why?IE9 在 iframe 中加载脚本时抛出异常。为什么?
【发布时间】:2012-01-13 10:13:59
【问题描述】:

前提条件:

我有一个带有 iframe 的 aspx 页面。此 iframe 指向由 MVC 在同一站点上处理的 url(它是混合站点,标准 ASP.NET 和 ASP.NET MVC)。 MVC 渲染的结果页面包含大量脚本引用。

问题:

IE9 在 iframe 中加载的每个脚本都会引发异常。这些例外与此类似:

Error: 'Function' is undefined

也就是说,它说每个窗口所拥有的最基本的东西不知何故缺席。单击所有这些弹出窗口后,页面就会按设计工作!
如果我直接在浏览器中从<iframe /> src 属性加载 URL,一切都会按预期工作。
如果我在另一个浏览器中打开该页面(我尝试过 Opera、Firefox),一切都会按预期运行——没有错误。

那么,IE9 想要什么?

【问题讨论】:

  • 无论 IE9 想要什么,它都会想要,从 我们 想要 代码和精确的错误消息这一事实判断。
  • "function" 在 JavaScript 中没有大写字母 F。是这个问题吗?
  • @Jon 这是 IE 抱怨缺少“本机”对象。减少案件是非常困难的。我知道,因为我去过那里。
  • @Diodeus 正如 Eugene 所说,这不是关于 function 关键字,而是关于 Function 全局对象。它们是有区别的。这也使得搜索该主题非常困难,因为 google 等不区分大小写

标签: javascript asp.net-mvc model-view-controller iframe internet-explorer-9


【解决方案1】:
function waitForjQuery(){
    if(typeof jQuery!='undefined'){
        //Do yor stuff!
    }
    else{
        setTimeout(function(){
            waitForjQuery();
        },500);
    }
}
waitForjQuery();

【讨论】:

  • 这如何回答这个问题?它甚至似乎不适用于这个问题
【解决方案2】:

进一步调查显示,解决方案是在设置“src”属性之前将有问题的 iframe 添加到其 dom 位置。

一旦设置了“src”,更改 iframe 在 DOM 堆栈中的位置会强制 IE9 对其进行垃圾回收。

一旦设置了 'src',iframe 可以通过 css 定位来调整大小和更改,但不能更改 DOM 堆栈中的相对位置。

通常,对话框和灯箱之类的插件会将已设置 src 的 iframe 填充到 dom 中,然后追加/前置或其他任何内容,从而触发 GC。

【讨论】:

    【解决方案3】:

    将以下脚本块放在 iFrame html

    的最顶部似乎可以解决我的问题。基本上,它强制 iframe 重新加载,正如一些人所指出的,这解决了这个问题。它似乎相对安全,因为没有“对象”和“日期”之类的东西,javascript 基本上是无用的。
    <script type="text/javascript">
        if(typeof(Object)==="undefined"){
            window.location.reload();
        }
    </script>
    

    【讨论】:

      【解决方案4】:

      在加载完整网页后尝试在最后加载 javascript。我觉得脚本甚至在 iframe 完全加载之前就在执行。

      对于在 IE9 中编写脚本的一些建议,请查看下面的给定链接 http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

      【讨论】:

        【解决方案5】:

        this msdn page 关于这个错误(或功能)。

        当您在 DOM 中移动 iframe 元素时,您会遇到此类错误。在这种情况下,IE 9 垃圾会收集 iframe(导致未定义的错误)并将其重新加载到另一个位置。

        一般来说,您应该创建元素,仅设置其src 属性once,然后将其放在 DOM 树中的某个位置once。它与在 iframe 本身中运行的代码无关。

        【讨论】:

        • +1 - 不到五个小时前我遇到了这个确切的问题,我在“工作”和“不工作”之间唯一改变的是一些在 DOM 中移动 iframe 的代码。删除那段代码解决了这个问题(我使用 z-index 来产生相同的效果)。
        • 在这篇文章中找到了类似的答案:stackoverflow.com/questions/5514973/…
        • 我在度假,所以无法尽快回复,但这似乎是相关的。然而,在受影响的地区,它说这已经从 IE8 更改为 IE9,但我也看到了 IE8 中缺少的 API 行为......仍然恭喜获得赏金! :)
        • 如果您使用 Knockout,请将您的
        【解决方案6】:

        我在野外也遇到过同样的情况。基本症状:

        • 您在 iframe 中加载脚本代码
        • 脚本代码提前运行(从头部或主体顶部)
        • IE 抱怨缺少一些原生对象

        我发现通常可以通过将脚本代码的执行延迟到 onload 或 DOMContentLoaded 来防止它...我知道帮助不大,但这是我遇到过的最困难的 IE 脚本错误之一。我给你的问题加分了,希望其他人也能找到,我们可以得到更详细的答案。

        另请参阅此问题: Error in Internet Explorer 9 (not earlier versions or other browsers) when including jQuery in an iframe

        【讨论】:

          猜你喜欢
          • 2012-01-17
          • 2010-12-09
          • 1970-01-01
          • 2011-04-11
          • 1970-01-01
          • 2011-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多