我在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);
答案 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已添加到页面中而不是从中删除。它似乎仍有同样的问题。