Skip to main content
 首页 » 编程设计

IE9 中 iframe 中的 JavaScript 代码不起作用

2024年08月15日9bjzhanghao

我在 ASP.NET 中有一个非常完整的网站,它使用 iframe。我正在努力将我们用来显示对话框的旧控件更改为使用 jQuery UI 对话框。我还确保 IE9 中一切正常。

事实是:我在 iframe 中显示的页面中的脚本在 IE9 中不起作用。为什么?因为Object、Array、String都是未定义的。可能还有其他一些问题,我只见过这个。

没有机会(因为很多原因)在某些对话框上停止使用 iframe。我宁愿不使用元标记来强制 IE8 兼容性。有谁知道有什么方法可以修复 IE9 中这个丑陋的错误吗?

我为配置 jQuery UI 对话框而制作的插件中 iframe 的 jQuery 代码:

options.content = $("<iframe>") 
    .attr("src", options.intSrcIframe) 
    .attr("frameborder", 0) 
    .attr("scrolling", options.intIframeScrolling) 
    .css("background-color", options.intBgColorIframe) 
    .attr("height", "100%") 
    .attr("width", "100%"); 
 
_this.html(options.content); 

请您参考如下方法:

注:here IE9 的一些文档可能有助于理解。感谢@Ben Amada 分享。

<小时 />

经过近一周的日复一日的疯狂之后,我发现了这一点。

IE9 的问题不在于 iframe 中的 javascript 代码。即使通过 javascript 或任何库添加 iframe 中的 javascript 也不行(我有很多可能会破坏 IE9 的 js 库和插件)。

问题是当您通过 DOM 移动 iframe 或一个祖先时。 IE9 将执行 iframe 中加载的页面中的代码,次数与您的移动次数相同。每次(但最后一次)都会有对象、字符串、数组和其他未定义的内容(以及其他错误)。

示例:

var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe"); 
iframe.appendTo("body"); 
$("#myIframe").appendTo("form:eq(0)"); 

“www.example.com”中的 JavaScript 代码将在出现上述错误时执行一次,然后在没有错误的情况下执行一次。

使用以下代码,代码将仅正确执行一次:

var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe"); 
iframe.appendTo("form:eq(0)"); 

我希望这可以帮助人们避免这种痛苦,

迭戈