2011-06-15 27 views
3

使用jQuery兼容的方式,我可以使用下面的函數來儘快DOM加載執行代碼:跨瀏覽器綁定頁面加載事件

$(function() { 
    // do stuff here 
}); 

或等價:

$(document).ready(function() { 
    // do stuff here 
}); 

爲了更好地理解原始JavaScript,我使用此代碼實現了類似的效果:

window.onload = function() { 
    // do stuff here 
} 

這種方法是跨瀏覽器兼容的嗎?有沒有更好的方法來實現這個功能?

+0

jQuery解決了「跨瀏覽器」的問題,並且是「實現此功能的更好方法」。 – Sparky 2011-06-15 03:50:50

+0

重複的http://stackoverflow.com/questions/3474037/window-onload-vs-body-onload-vs-document-onready – mrk 2011-06-15 03:51:14

回答

7

是的,它是跨瀏覽器兼容,但onLoad等待一切在頁面上加載在它發生之前。內部jQuery.ready使用DOMContentLoaded event和一些黑客來支持不支持DOMContentLoaded的舊瀏覽器。大多數現代瀏覽器支持DOMContentLoaded,包括從版本9開始的IE。您可以測試瀏覽器是否支持DOMContentLoadedusing this page

如果您沒有使用內置支持DOMContentLoaded的jQuery等DOM庫,您可以測試DOMContentLoaded支持,然後在onLoad上回退,如果瀏覽器不支持它。

2

跨瀏覽器兼容性將不得不取決於你如何定義術語「瀏覽器」。比如說,如果它是一個基於文本的瀏覽器,那麼它可能不是你想要的。

要回答你的問題,如果該特定瀏覽器保證window.onload功能,它將是跨瀏覽器兼容的。

作爲一般指導,我們通常使用經過測試的庫,以便我們允許庫處理這種「跨瀏覽器」兼容性,並處理實際的應用程序邏輯。

希望它有幫助!

+0

歡呼你的答案!我正在嘗試學習原始'JS',因爲我開始使用'jQuery'學習! – aligray 2011-06-15 03:52:19

+1

@aligray:我讚揚你的努力。我希望每個人都有這個願望。但是,有很多你不能用原始JavaScript輕鬆完成,你可以簡單地用jQuery來完成。換句話說,我認爲這不是「一個或另一個」。我相信你可以在實現你的jQuery的同時學習正確的JavaScript **。任何你不再需要的東西,因爲jQuery做得更好,好吧,你不再需要它。再次,我在10多年前學習了JavaScript。 – Sparky 2011-06-15 03:59:02

+2

@aligray如果你想學習JS的「正確」方式,我會推薦閱讀Douglas Crockford的書_JavaScript:The Good Parts_和Stoyan Stefanov的書_Object-Oriented JavaScript:創建可擴展的,可重用的高質量JavaScript應用程序和庫_非常好。如果你對這種庫級別的東西感興趣,John Resig的_ JavaScript JavaScript Ninja_將會是一個很好的資源......如果他們終於發佈它的話(最初預定2008年秋季我預訂了它)。 – 2011-06-15 04:08:09

7

這類似於jQuery不會:

window.$ = {}; 
$.ready = function(fn) { 
    if (document.readyState == "complete") 
     return fn(); 

    if (window.addEventListener) 
     window.addEventListener("load", fn, false); 
    else if (window.attachEvent) 
     window.attachEvent("onload", fn); 
    else 
     window.onload = fn; 
} 

,並使用它:

$.ready(function() { 
    // code here... 
}); 
4

window onload方法是跨瀏覽器兼容的,但有更好的選擇。

  • jQuery就緒事件在DOM準備好時觸發。
  • 窗口onload事件觸發所有數據下載。

因此,假設您的網頁上有很多圖片(或一個BIG圖片)。該html文件將完成下載並準備好在圖像完成下載之前進行很長時間的操作。所以jQuery準備好的事件拍攝,你可以開始做很棒的JavaScript的東西,而所有這些漂亮的圖片下載。

這是使用js庫的好主意之一。

當沒有那麼多的圖像時,差異可以忽略不計。但是,您只能在onload事件中一次設置一個方法。但是,您可以多次設置jQuery的ready事件,並且每個方法都會按順序調用。