如何将Universal Analytics与Chrome扩展程序集成?

时间:2013-04-21 18:56:03

标签: google-chrome-extension google-analytics

Chrome扩展指南提供了旧分析安装的教程:https://developer.chrome.com/extensions/tut_analytics.html

说明只是说链接到https版本并更新清单以允许从该URL加载脚本。所以那些应该仍然适用于新版本。事实上,我可以看到从服务器加载脚本。

一旦脚本加载分析,就无法正确初始化它,并且永远不会处理它的内部队列(ga.f)以将这些事件发送到服务器。控制台中没有错误。它只是悄无声息。

我的猜测是,新的通用分析系统并未设置为在扩展环境中运行,但是通用文档没有提到这一点:https://developers.google.com/analytics/devguides/collection/analyticsjs/

是否有人知道是否甚至可以将Universal Analytics添加到扩展程序以及何时可以添加?

6 个答案:

答案 0 :(得分:38)

Google代码上有一个issue:解决方案是通过分析您的自己的协议检查功能或简单null进行无法检查,{{3 }}

ga('create', ...) 之后

ga('set', 'checkProtocolTask', null); // Disable file protocol checking.

因此您无需修改​​原始analytics.js脚本。只需添加标准跟踪代码段(不要忘记添加“https:”前缀)并在内容安全策略中添加“official way”。

对ayal gelles解决方案的说明: 没有必要将chrome-extension://...添加到内容安全策略,因为它已包含在'self'语句中。此外,您应该使用chrome.runtime.getURL("path/to/analytics.js")而不是通过硬编码的URL加载脚本。这样您就不需要知道扩展程序的ID,Chrome会为您填写。

答案 1 :(得分:24)

我写了一篇博文 - How to add Google’s Universal Analytics tracking to a Chrome extension

以下是它的内容:

// Standard Google Universal Analytics code
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); // Note: https protocol here

ga('create', 'UA-XXXXX-YY', 'auto');
ga('set', 'checkProtocolTask', function(){}); 
ga('require', 'displayfeatures');
ga('send', 'pageview', '/options.html');

我特别想强调3点:

  • 在脚本地址的开头指定“https”以与manifest.json文件中的列表匹配
  • 使用空函数覆盖checkProtocolTask
  • 通过指定路径/options.html发送虚拟综合浏览量 - 否则Google Analytics将拒绝格式为chrome-extension://gdocgfhmbfbbbmhnhmmejncjdcbjkhfc/options.html
  • 的网址

答案 2 :(得分:9)

我刚刚遇到这个,似乎已经破解了我的方式。这可能会在某些时候破裂或者没有完全发挥作用,但这里有:

  • 从此处下载GA uglified +缩小的源代码:https://www.google-analytics.com/analytics.js,放入您的chrome扩展程序文件夹,稍后可以在后台页面加载。

  • 在其中,找到一个看起来像这样的函数:

function Oa(){var a=M[B][E];if("http:"!=a&&"https:"!=a)throw"abort";}. 

这是“失败点”,因为我们的“协议”是“chrome-extension:”,而不是两者之一。

  • 所以......将此功能更改为:
function Oa(){var a=M[B][E];if("chrome-extension:"!=a&&"http:"!=a&&"https:"!=a)throw"abort";}
  • 将此类“内容安全策略”添加到您的清单文件中,确保它指向您刚刚修改过的您的本地版本的analytics.js:
"content_security_policy": "script-src 'self'  chrome-extension://EXTENSIONID/path/to/analytics.js;  object-src 'self'",
  • 将GA片段更改为ALSO指向同一文件,如下所示:
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','chrome-extension://EXTENSIONID/path/to/analytics.js','ga');

希望这会有所帮助。

答案 3 :(得分:2)

我设法使用Chrome Platform Analytics(CPA)启动并运行Google Analytics。唯一令人困惑的部分是如何在GA的管理控制台中设置属性。我不得不创建一个移动应用程序属性,这不是太直观。

此外,我创建了options page,允许用户根据需要禁用分析,以符合opt-out要求。

我希望有所帮助!

答案 4 :(得分:1)

有一种方法可以使用“度量协议”与Google Analytics进行通信。 我为此开发了一个脚本:

https://github.com/melalj/universal-ga-extension

答案 5 :(得分:1)

关于新的analytics.js(与旧的ga.js相反),这个例子对我有用:

function setupGoogleAnalytics() {
  if (!window.ga) {
    (function(){
      window.ga = function() {
        (window.ga.q = window.ga.q || []).push(arguments);
      }, window.ga.l = 1 * new Date();
      var tag = 'script';
      var a = document.createElement(tag);
      var m = document.getElementsByTagName(tag)[0];
      a.async = 1;
      a.src = 'https://www.google-analytics.com/analytics.js';
      m.parentNode.insertBefore(a, m);
    })();
    ga('create', 'UA-XXXXXXX-Y', 'auto');
    ga('set', 'checkProtocolTask', null);
  }
}

请注意,您需要将以下content_security_policy片段添加到manifest.json:

{
...
  "content_security_policy": "script-src 'self' https://www.google-analytics.com; object-src 'self'"
...
}