2008-12-30 51 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”属性,因此如果它们被加载(在页面加载之后)或只是在它们找到它时加载它(所以不是异步)将加载。
相关问题