15

我正在开发一个使用内容脚本修改某些页面的 Google Chrome 扩展程序。为了了解应用这些更改的时间和地点,我们正在研究谷歌分析,因为我们已经将它用于其他网络资产。

我们通过清单文件包含 ga.js 库,并在我们对页面应用更改时通过同步页面调用触发 _trackPageview。

var pageTracker = _gat._getTracker("UA-our-UA");    
pageTracker._setDomainName("none");
pageTracker._setAllowLinker(true);    
pageTracker._trackPageview(window.location.href);

这里的问题是,不同域中的每个 pageView 都算作新访问和访问者。它有办法规避吗?例如,它使用 chrome 扩展 sqlite 数据库或浏览器中的键值存储来存储唯一的用户 id 并独立访问 id 域。这可能吗?

谢谢

4

2 回答 2

27

您不应该在其他人的网站内执行该代码。Google Analytics 配置有些敏感,如果网站有自定义实现,您可能会为该访问者破坏它。

您应该在自己的后台页面中包含 Google Analytics。然后在每次需要跟踪事件时从 content_script 与后台页面进行通信。

通过在您的后台脚本中包含 GA 脚本很好,因为您不会干扰网站上的其他代码,并且它始终从同一域执行,因此将使用相同的 cookie 不会导致重复访问/访问者。

以下是有关如何在背景页面上安装 GA 的更多信息。

https://developer.chrome.com/docs/extensions/mv2/tut_analytics/

这是将信息从内容脚本传递到背景页面的文档:

http://code.google.com/chrome/extensions/messaging.html

于 2012-07-07T07:06:28.583 回答
15

正如 Eduardo 在他的回答中所说,您需要一个背景页面,因此可以这样做:

在您的manifest.json文件中:

,
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'"
,

content_scripts.js中,每当您想跟踪事件时,向后台页面发送消息以触发该事件。

chrome.runtime.sendMessage({action: "yourEvent"});

背景.js

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = 'https://ssl.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();

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

    // here we receive the coming message from the content script page
    chrome.runtime.onMessage.addListener(function( request, sender, sendResponse ) {
        if(request.action == "yourEvent"){
            _gaq.push(['_trackEvent', "eventCategory", 'eventType']);
        }
    });
于 2015-07-27T13:12:37.513 回答