2010-01-25 86 views
0

我在IE6完全呈現頁面之前運行的一些JavaScript有問題(也許還有其他版本,但現在只是測試IE6,Firefox似乎沒問題)。我可以通過調用這樣的window.onload的JS解決這個問題:Javascript執行頁面渲染後IE6

window.onload = function(){doIt();} 

然而,我關心的是事實,我將覆蓋其他任何可能已經在window.onload。該代碼將用作庫的一部分,因此我不能保證window.onload不會被其他人設置在其他地方。我將我的函數,而追加到onload事件是這樣的:

window.onload += function(){doIt1();} 
window.onload += function(){doIt2();} 

但是,當我這樣做,只是doit2()被調用。有沒有辦法爲頁面完全呈現時註冊一個事件處理程序?我的第二個想法是將我的代碼放入一個循環中,檢查運行前是否存在所有對象。但我很害怕這可能會鎖定瀏覽器。

只是爲了一些背景信息,我的代碼隱藏/顯示的iFrames。我知道我可以使用iFrame的onload屬性,但我需要在調用代碼之前全部加載所有的iFrame。

社區的任何想法?預先感謝您的意見。

回答

6

使用該通用addLoadEvent功能...

function addLoadEvent(func) { 
    if(typeof window.onload != 'function') 
    window.onload = func; 
    else { 
    var oldLoad = window.onload; 

    window.onload = function() { 
     if(oldLoad) oldLoad(); 
     func(); 
    } 
    } 
} 

這基本上排隊要執行的功能。它永遠不會覆蓋以前分配的處理程序。下面的示例使用...

addLoadEvent(function() { alert("One!"); }); 

addLoadEvent(two); 
function two() { 
    alert("Two!"); 
} 

我想提一提,像jQuery庫照顧的已知問題這樣對你。

+2

快速響應!幾乎和我想要說的一樣! 爲了清晰起見,您可能希望將示例用法放入代碼塊中。 值得注意的是,這將始終將新功能添加到被調用鏈的末尾。這可以簡單地通過改變第二部分中'func()'和'oldload()'調用的順序來改變,或者可能通過將第二個變量傳遞給函數來改變。 – PeterJCLaw 2010-01-25 21:02:53

+0

+1完美!該死的,我喜歡這個網站! – 2010-01-25 21:21:00

+0

耶,這個答案讓我超過10,000個代表:) – 2010-01-25 22:03:03