使用Google Analytics跟踪内容脚本

15

我正在开发一个Google Chrome扩展程序,使用内容脚本修改特定页面。为了理解何时以及在哪里应用这些更改,我们正在研究谷歌分析,因为我们已经在其他网站上使用它。

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

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

问题在于每个不同域名下的页面视图都被视为新的访问和访客。有没有什么方法可以规避这个问题?例如,使用Chrome扩展程序SQLite数据库或浏览器中的键值存储来存储独特的用户ID和与域无关的访问ID。这种做法可行吗?

谢谢

2个回答

27

你不应该在别人的网站上执行那段代码。Google Analytics的配置比较敏感,如果一个网站有自定义实现,你可能会破坏该访问者的配置。

你应该将Google Analytics包括在你自己的后台页面中。然后每次需要跟踪事件时,从content_script返回到你的后台页面进行通信。

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

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

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

这里是有关如何将信息从Content Scripts传递到您的后台页面的文档:

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


1
好主意,背景页面。让我试试。我看到了GA扩展指令,但似乎只适用于弹出窗口。再次感谢您的提示。如果这行得通,我会在这里发布的。 - Stan Wiechers
1
将分析代码放在通过 Chrome 扩展程序注入的 iframe 中是否可行? - wp student
这个不起作用。Chrome将忽略“不安全”的CSP值。 - user239558

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"});

background.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']);
        }
    });

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