有谁知道为什么Google Analytics需要两个单独的脚本标记?

具体来说,他们的说明建议用户将以下代码段嵌入到网页中以进行跟踪:

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

为什么用户不能只使用一个这样的脚本块:

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
有帮助吗?

解决方案

<script>标签按顺序执行。如果前一个块没有执行,则.js块无法执行。

第一个_gat标记负责创建将加载外部js的Google <=>标记。第一个<=>完成执行后,DOM如下所示:

<script></script> <!-- First Script Tag -->
<script></script> <!-- Google Injected Script -->
<script></script> <!-- Second Script Tag -->

这可以保证第二个<=>标记在<=>完成加载之前不会执行。如果第一个和第二个<=>组合在一起,这将导致<=>变量未定义(因为在第一个脚本执行完毕之前,Google注入的脚本不会开始加载)。

其他提示

一旦在代码中执行,就会发生

document.write。所以如果我们使用你的<!>“一个脚本块<!>”;例如,实际生成的源代码最终将如下所示:

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

因此var pageTracker = _gat._getTracker("UA-8720817-1"); pageTracker._trackPageview();代码会失败,因为在加载ga.js文件之前不会定义_gat

这有意义吗?

第一个块实际上是使用JavaScript编写一个全新的脚本标记内联来替换该脚本标记。它正在检查您是否使用<!>“; https <!>”;在被请求的页面上,如果是这样,要使用他们的安全URL来请求脚本,或者您的浏览器可能会显示<!>“此页面的部分是不安全的 - 显示安全项目?<!>”;或拒绝拨打电话。

如果第一个脚本标记包含在第一个脚本标记中,它将被吹走和/或不是一个格式正确的脚本标记,并且您的代码必须与它们混合。

通过这种方式,您可以干净利落地调用trackPageView并在您自己的块中设置属性等,并且仍可通过http和https正常工作。

因此,当页面呈现时,DOM将在第一个脚本执行后显示如下(常规http):

<!-- Google Analytics -->
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

这个(https):

<!-- Google Analytics -->
<script src='https://ssl.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

更多详细信息: http://code.google.com/的API /分析/文档/跟踪/ gaTrackingOverview.html

我怀疑这是为了避免使用document.write部署脚本标记来避免模糊的浏览器问题。

为了它的价值,我们充分利用了onclick = <!>; pageTracker._trackPageview(%filename%)<!> quot;跟踪直接文件下载的机制,但仍然不希望在页面完全加载之前跟踪实际的页面视图。我们必须在页面顶部包含第一个标记以启用它,但最后留下最后的_trackPageview()调用(好吧,我们也使用var pageTracker位)。

不一定为什么他们会以这种方式分解它,但它会使我们的目的更容易。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top