24

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

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

没有机会(因为很多原因)在某些对话框上停止使用iframe。我宁愿不使用meta标签来强制IE8兼容性。有没有人知道任何方式来解决这个在IE9中的错误?

谢谢,迭戈

编辑

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

在插件的iframe jQuery代码我做出决定的配置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

你怎么知道他们不确定? – 2011-04-01 14:55:27

+0

你能否提供一些关于如何实例化iframe的示例代码?例如,你是否在iframe中加载jQuery? – 2011-04-01 14:55:59

+0

@ŠimeVidas:我从视觉sudio运行该网站,因为这些变化尚未实现。 – Diego 2011-04-01 14:59:40

回答

26

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


经过差不多一周的疯狂日复一日我发现它。

IE9的问题并不是专门用于iframe中的javascript代码。甚至没有通过JavaScript或任何库(我有很多js库和插件,可能会拧IE9)添加iframe中的JavaScript。

问题是当您通过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)"); 

的JavaScript代码在“www.example.com”将一旦与上述的误差没有错误执行,并且然后一次。

用下面的代码的代码将只是一次正常excecuted:

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

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

迭戈

+1

感谢您的分析。我正准备在我的网站上处理这个问题,这对我有很大的帮助。 – 2011-04-18 21:13:42

+2

@Elian Ebbing:不客气。很高兴帮助! – Diego 2011-04-19 10:32:35

+0

谢谢,有完全相同的问题。你为我节省了很多挫折。 – 2011-04-21 13:45:22

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框架需要解决这个问题。

0

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

+1

它是在添加到DOM之前设置的源?一旦进入DOM就会移动?如果是的话,尽量避免。另外:这应该是一个答案? – Diego 2012-10-12 15:10:09

+0

源代码从不设置,因为iframe仅用于提交页面的目标。 – 2012-10-12 15:24:55

+0

我不记得这是否发生在我身上(很久以前)。 – Diego 2012-10-12 18:35:11