IE9中的iframe中的Javascript代码无法正常工作

时间:2011-04-01 14:46:31

标签: javascript asp.net internet-explorer iframe internet-explorer-9

我在ASP.NET中使用iframe这是一个非常完整的网站。我正在努力改变我们用来显示对话框以使用jQuery UI对话框的旧控件。我也确保在IE9中一切正常。

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

在某些对话框上停止使用iframe是没有机会的(因为很多原因)。而且我宁愿不使用meta标签强制IE8 Compability。有谁知道在IE9中修复这个uggly错误的方法吗?

谢谢,迭戈

修改

这里有一些信息可能是helfull:

我为配置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);

3 个答案:

答案 0 :(得分:27)

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


经过近一周的疯狂日复一日,我发现了它。

IE9的问题并非专门针对iframe中的javascript代码。甚至没有使用javascript或任何库添加的iframe中的javascript(我有很多js库和插件可能会搞错IE9)。

问题是当您通过DOM移动iframe或一个祖先时。 IE9将在iframe中加载的页面中执行多次动作。每次(但最后一个)都会有Object,String,Array等未定义的(以及其他错误)。

示例:

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)");

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

答案 1 :(得分:3)

如果您没有创建新元素,可以使用现有的iframe实现此目的。

$(function () {
    var iframeSrc = $("#iframeid").attr("src"); // capture target URI
    $("#iframeid").attr("src", "about:blank"); // delay loading until we reposition in the DOM
    $("#iframeid").appendTo("#newparent").attr("src", iframeSrc); // reposition, load iframe by setting src
});

IE9或jquery框架需要解决此问题。

答案 2 :(得分:0)

我遇到了类似的问题,但iframe已添加到页面中而不是从中删除。它似乎仍有同样的问题。