在iframe中加载脚本时,IE9会引发异常。 为什么?

前提:

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

问题:

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

Error: 'Function' is undefined

也就是说,它说每个窗口最基本的东西都是某种程度上缺失的。 一旦你点击了所有这些弹出窗口,该页面就可以按照设计工作!
如果我直接从浏览器中的<iframe /> src属性加载一个URL,一切都按预期工作。
如果我在另一个浏览器中打开该页面(我尝试过Opera,Firefox),那么一切都按预期工作 - 没有错误。

那么,IE9需要什么?


有这个关于这个bug(或功能)的msdn页面。

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

一般来说,你应该创建元素,只设置它的src属性一次,然后把它放在DOM树中的某个地方一次。 它与在iframe中运行的代码本身无关。


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

  • 您可以在iframe中加载脚本代码
  • 脚本代码运行得很早(从头部或主体顶部运行)
  • IE抱怨一些丢失的本地对象
  • 我发现通常可以通过延迟脚本代码的执行来阻止它,直到onload或DOMContentLoaded ...我知道的帮助不多,但这是我遇到过的最困难的IE脚本错误之一。 我提高了你的问题的分数,希望它能被别人发现,我们可以得到更详细的答案。

    另请参阅此问题:在iframe中包含jQuery时,在Internet Explorer 9(不是早期版本或其他浏览器)中出现错误


    将以下脚本块放在iFrame html <head>的最顶部似乎可以解决我的问题。 基本上,它强制iframe重新加载,正如一些人指出的那样,解决了这个问题。 看起来相对比较安全,因为没有像'Object'和'Date'这样的东西,javascript本质上是无用的。

    <script type="text/javascript">
        if(typeof(Object)==="undefined"){
            window.location.reload();
        }
    </script>
    
    链接地址: http://www.djcxy.com/p/89921.html

    上一篇: IE9 throws exceptions when loading scripts in iframe. Why?

    下一篇: Google Web Fonts don't load in FF 4.0 or IE9