我的问题是,有时候一段JavaScript(通常是谷歌分析)可能需要很长时间才能加载,尽管HTML已经准备好“遍历和操纵”并不重要。如果我要使用以下代码:
$(document).ready(function () {
$("p").text("The DOM is now loaded and can be manipulated.");
});
这是否意味着在加载Google Analytics之后才会填充<p>
?
在大多数网站上通常不需要像Google Analytics这样的东西,我经常发现我正在等待它加载。 (我不想使用onload,因为of it's unreliability。)
有没有更好的方式或方式说“不要等待[...]”?
注意:我通常无法将代码放在<script>
标记之前的</body>
标记中,因为该网站位于模板中。我通常只能编辑页面的“内容”。
答案 0 :(得分:6)
您是否尝试过就绪功能中加载Google分析?这是一个讨论动态脚本加载的link。据推测,在准备好的脚本的其他部分已经执行之后,你最终会这样做。
答案 1 :(得分:5)
Google实际上发布了他们所谓的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后加载,因此你已经可以使用页面上的所有内容了。
答案 2 :(得分: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>
一些注意事项:
答案 3 :(得分:-1)
这只是猜测,但你考虑过setTimeOut()吗?
$(document).ready(function()
{
setTimeOut(function()
{
// Your code comes here
}, 0); // We don't really need any delay
});
setTimeOut()具有转义调用堆栈的优点,因此它可以解决您的问题。
答案 4 :(得分:-2)
我有同样的问题。只需将此行放在第一次javascript加载,然后在IE上运行正常:
jQuery.noConflict();