谷歌分析JavaScript片段分析

3

想知道Google Analytics代码片段在JavaScript编程方面是如何工作的。

<script type="text/javascript">

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

  (function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
        'http://www') + '.google-analytics.com/ga.js';
    ga.setAttribute('async', 'true');
    document.documentElement.firstChild.appendChild(ga);
  })();

</script>

1) 我们向_gaq数组推送了2个元素,但它实际上何时执行/使用尤其是因为ga.js位于远程服务器上?我试图查看ga.js代码,但它非常令人困惑。

2) 如果网站是https://,但我们仍将javascript链接为http://www.google-analytics.com/ga.js会发生什么?

(function() {
        var ga = document.createElement('script');
        ga.src = 'http://www.google-analytics.com/ga.js';
        ga.setAttribute('async', 'true');
        document.documentElement.firstChild.appendChild(ga);
      })();
4个回答

3

_gaq 是一个 全局变量(在浏览器中,全局变量存储在 Window 对象中)。

它在 https://ssl.google-analytics.com/ga.js 中被引用,如下所示:

   var He = function () {
      var a = W._gaq,
      b = l;
      if (a && Aa(a[p]) && (b = "[object Array]" == Object[y][w].call(Object(a)), !b)) {
         Z = a;
         return
      }
      W._gaq = Z;
      b && Z[p][xa](Z, a)
   };

此外,W指的是窗口全局变量(该脚本已被压缩以节省字节):

   var W = window,

为了方便起见,我在这里粘贴了ga.js的格式化版本:

http://pastebin.com/sBmeSg9M

请查看第603行和第1956行。


谢谢!第一部分解释得很好。 - CodeCrack
你能否解释一下在_setAccount和_trackPageview方面,数组在该片段中的使用流程? - CodeCrack

1
  1. Google Analytics 代码会在您的页面上加载和运行,位于您的域名下,因此它可以访问 window 和所有定义在其中的变量。 _gaq 是 Google 代码运行时检查的魔术变量名称,用于查看已定义的内容,并使用找到的值开始跟踪事物。然后,在您的页面加载期间跟踪此变量的更改(这是它进行点击事件跟踪等操作的方式)。

  2. 正如其他人所提到的,如果在通过 HTTPS 提供的页面上未使用 Google Analytics 的 HTTPS URL,则会出现“不安全内容”的警告。请使用 Google 提供的代码,他们有理由这样做。


假设我想在我的网站上托管类似的JavaScript代码片段,那么我是否需要设置SSL证书以便其他网站可以链接到我的JavaScript代码? - CodeCrack
如果其他人要在HTTPS页面上包含您的代码片段,则需要为您的域名拥有SSL证书,并为托管代码片段的服务器启用HTTPS。否则,他们将收到相同的警告并且您的代码将无法执行。 - Pascal Zajac

0

2) 如果网站是https://,但我们仍将Javascript链接为http://www.google-analytics.com/ga.js,会发生什么?

这将防止几乎所有现代浏览器(例如Chrome)加载JS文件,并向用户显示“不安全内容”的警告。

其原因是,加载JS文件将允许 MITM攻击 而不会出现SSL证书警告。


那么,如果我想在我的服务器上为他人托管类似于ga.js的代码,我需要设置SSL证书或者其他什么吗? - CodeCrack
如果另一个服务器可以通过HTTPS访问:是的。如果没有SSL加密连接,脚本将无法加载,并向用户显示“不安全内容”警告。 - Testuser

0

2.:那么您的SSL证书可能无法正常工作。您的SSL网站中包含了非SSL(https)脚本。这是您所指的吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接