2008-12-30 81 views
3

我的問題是,有時候一段JavaScript(通常是Google Analytics)可能需要很長時間才能加載,但對HTML做好準備並不重要被「穿越和操縱」。如果我使用下面的代碼:jQuery文檔ready()函數執行需要很長時間的可能性

$(document).ready(function() { 
    $("p").text("The DOM is now loaded and can be manipulated."); 
}); 

會這是否意味着<p>不會被填充,直到像谷歌Analytics(分析)被加載後?

像大多數網站一般不需要Google Analytics(分析),我經常發現我正在等待它加載。 (我不想使用onload,因爲of it's unreliability。)

有沒有更好的方法或方法來說「不要等待[...]」?

注:我通常不能將代碼放在</body>標記之前的<script>標記中,因爲該網站基於模板。我通常只能編輯頁面的「內容」。

回答

5

谷歌已經發布了其實他們叫什麼Asynchronous Tracking

<script type="text/javascript"> 

    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXX-X']); 
    _gaq.push(['_trackPageview']); 

    (function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga); 
    })(); 

</script> 

這解決了問題,因爲它不僅會一旦DOM解析就加載,因此你已經可以使用頁面上的所有東西了。

+0

如果您使用的是當前版本的Google Analytics(analytics.js),請注意[建議的代碼已有所變化](https://developers.google.com/analytics/devguides/collection/analyticsjs/#alternative_async_tracking_snippet )。 – 2016-06-07 13:11:12

6

您是否嘗試過從ready函數內加載Google analytics?這裏有一個link討論動態腳本加載。據推測,在你的預備腳本的其他部分已經執行完之後,你最終會這樣做。

-1

這只是一個猜測,但你有沒有考慮過setTimeOut()?

$(document).ready(function() 
{ 
    setTimeOut(function() 
    { 
     // Your code comes here 
    }, 0); // We don't really need any delay 
}); 

setTimeOut()具有轉義調用堆棧的功能,因此它可以解決您的問題。

-2

我有同樣的問題。只要把此行的第一個JavaScript加載它後工作正常在IE瀏覽器:

jQuery.noConflict(); 
+2

我不認爲這會起作用...這是爲了不同的目的。 – 2009-03-27 06:21:27

1

在最現代的瀏覽器你現在可以這樣寫:

<script>var _gaq = _gaq || [["_setAccount","UA-XXXXX-X"],["_trackPageview"]]; </script> 
<script src="//www.google-analytics.com/ga.js" async></script> 

該腳本將加載在大多數瀏覽器異步,並與自動的不同方案應對..

你可能想使用的時間越長 - 更安全舊的瀏覽器 - 版本:

<script>var _gaq = _gaq || [["_setAccount","UA-XXXXX-X"],["_trackPageview"]]; </script> 
<script type="text/javascript" src="//www.google-analytics.com/ga.js" async="true" defer="true"></script> 

幾個cavets:

  • 在IE6中存在一個錯誤,它會阻止JS因缺少協議而被加載(請參閱http://www.paulirish.com/2010/the-protocol-relative-url/),但您可以添加您正在使用的協議。
  • 舊版瀏覽器不會理解「async」屬性,因此如果它們被加載(在頁面加載之後)或只是在它們找到它時加載它(所以不是異步)將加載。
相關問題