jQuery对话框iframe在IE中加载一次,在其他浏览器加载两次?

时间:2009-11-01 22:38:27

标签: jquery jquery-ui iframe

我有一个jQuery对话框,其内容由iframe定义。在显示对话框之前,此iframe的内容是不可见的。在IE中,这个内容及其相关的javascript正在执行,因此当显示对话框时,很明显javascript已经完成了所有的加载工作。但是在Firefox和Chrome之类的非IE浏览器中,这个iframe再次在对话框可见之前执行其javascript,但显然重新 - 在显示对话框时执行它。

因为这是一个相当昂贵的iframe(使用ajax调用执行大量javascript),我不希望浏览器支付初始化两次的费用。事实上,我可能会说我想延迟初始化它,直到对话框实际出现。但是它是否在它出现之前初始化然后保留初始化(正如IE正在做的那样)或它只是延迟初始化直到对话框可见,我可以解决它。

我不能满足的是我现在看到的,非IE浏览器初始化两次,第一次是完全浪费,因为它们在对话框出现时重新初始化。

我所指的网页:http://openidux.dotnetopenauth.net/。您可以通过单击右上角的“登录”链接来重现行为。

感谢。

3 个答案:

答案 0 :(得分:7)

我最初将iframe.src属性设置为“about:blank”,并且仅在对话框实际弹出时设置源。然后,为了避免在对话框隐藏时重新加载(愚蠢,我知道),我将其重新设置为about:blank。

$(document).ready(function() {
    $("#loginDialog").dialog({
        close: function(event, ui) {
            // Clear the URL so Chrome/Firefox don't refresh the iframe when it's hidden.
            iframe.src = "about:blank";
        },
        open: function(event, ui) {
            iframe.src = loginContent;
        },
    });
});

答案 1 :(得分:2)

我刚才遇到了同样的问题。我发现打开对话框时链接到动画选项的问题,似乎干扰了iframe。只需从您的javascript中删除“显示”设置即可。

更改此

$("#blah").dialog({ title: 'Dialog Title', show: 'slide', .... }); 

到这个

$("#blah").dialog({ title: 'Dialog Title', ... });

答案 2 :(得分:0)

我没有仔细研究过这个链接,但是你用什么样的onload事件来初始化IFRame?它可能是onDomLoad / onLoad问题吗?