2009-11-01 50 views
5

我有一個jQuery對話框,其內容由iframe定義。在顯示對話框之前,此iframe的內容是不可見的。在IE中,這個內容及其關聯的javascript正在執行,所以當顯示對話框時,很明顯javascript已經完成了所有的加載工作。但在非IE瀏覽器如Firefox和Chrome瀏覽器中,此iframe在對話框可見之前再次執行其javascript,但顯然當顯示對話框時它會執行它。jQuery對話框iframe在IE中加載一次,在其他瀏覽器中加載兩次?

因爲這是一個相當昂貴的iframe來創建(大量的JavaScript執行ajax調用和所有),我不希望瀏覽器支付兩次初始化它的費用。實際上,我可能會說我想延遲初始化它,直到實際調出對話框。但是它在啓動之前是否初始化,然後保留初始化(如IE所做的那樣),或者它只是延遲初始化直到對話框可見,我可以解決它。

我無法解決的是我現在看到的,非IE瀏覽器初始化兩次,第一次是完全浪費,因爲它們在對話框出現時被重新初始化。

我指的是:http://openidux.dotnetopenauth.net/。您可以通過單擊右上角的登錄鏈接來重新編輯該行爲。

謝謝。

回答

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; 
     }, 
    }); 
}); 
0

我還沒有深入瞭解鏈接,但是您使用什麼樣的onload事件來初始化IFRame?它可能是一個onDomLoad/onLoad問題?

2

我剛纔也有同樣的問題。我發現在打開對話框時將問題鏈接到動畫選項,似乎干擾了iframe。只需從您的javascript中刪除「顯示」設置即可。

改變這種

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

這個

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