javascript - 从 Chrome 扩展程序访问 Google Analytics window._gaq

标签 javascript google-chrome google-chrome-extension google-analytics

我正在编写一个 Chrome 扩展程序,主要用于学习目的,如果安装了 Google Analytics,它将向我显示 Google Analytics 跟踪 ID (UA-xxxxxx-x)。

我了解我需要对页面中的内容脚本使用 sendRequest 来检索信息,并且已成功实现该功能

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    // analytics request check GA and send back
    if(request.requestDetail == "analytics") {

    console.log(window._gaq);
    console.log(window._gaq._getAsyncTracker()._getAccount());

    // unknown response, send back nothing!
    } else {
        sendResponse({}); 
    }
});

监听器正在接收请求,Google Analytics 肯定安装在我正在测试的网页上,window._gaq 和 window._gaq._getAsyncTracker()._getAccount() 都可以通过控制台访问并返回我所期望的内容。

为什么通过监听器访问时window._gaq未定义?我应该如何从 Chrome 扩展程序访问它?

我认为这是出于安全原因,因此也尝试修改 list 以包含以下内容,但仍然没有成功

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

我想第二个问题是:

我正在尝试以我正在使用的方式实现可能的目标(我已经设法使用页面内容的正则表达式匹配来获得类似的结果,但希望直接访问对象)

最佳答案

这与内容安全策略无关。我认为您正在将内容脚本注入(inject)网页并尝试访问网页中的变量。由于内容脚本是在孤立的世界中执行的,因此您无法直接执行此操作。请参阅https://developer.chrome.com/trunk/extensions/content_scripts.html#execution-environment了解更多详情。

要访问网页中的变量(在您的情况下是必要的),您必须在页面中注入(inject) <script> 标记。检索该脚本中的 Google Analytics ID,并与内容脚本 ( https://developer.chrome.com/trunk/extensions/content_scripts.html#host-page-communication ) 通信,让内容脚本将其发送回您的扩展程序。

这是一个简单的例子(免责声明:只是为了说明如何做到这一点。我自己没有测试过。):

window.addEventListener("message", function(event) {
 if (event.source != window)
  return;
if (event.data.type && (event.data.type == "FROM_PAGE")) {
  chrome.extension.sendMessage(...); // Send analytics ID (in event.data.googleAnalyticsId) to your extension here
}, false);
var script = document.createElement('script');
script.appendChild(document.createTextNode('window.postMessage({googleAnalyticsId: (window._gaq ? window._gaq._getAsyncTracker()._getAccount() : ""), type: "FROM_PAGE"}, "*");');
document.appendChild(script);

另请注意,chrome.extension.onRequest/sendRequest 已被弃用很长时间 ( https://developer.chrome.com/trunk/extensions/whats_new.html#20 )。您应该使用 onMessage/sendMessage 来代替。

关于javascript - 从 Chrome 扩展程序访问 Google Analytics window._gaq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166510/

相关文章:

javascript - 使用计时器打开和关闭 Chrome 中的选项卡

javascript - Chrome 扩展程序包大小

javascript - 有没有办法停止 dojo onBlur 事件处理程序中的所有其他事件?

html - IE 不在 FLOAT 左类中显示图像。适用于 Chrome 和 Firefox

javascript - 函数 getById Raphael js

javascript - Chrome 问题,鼠标滚轮滚动 iframe

javascript - 在页面已经完成加载后识别页面已完成加载内容

javascript - Angular : How to get returned value from factory

Javascript按类名删除元素

javascript - 谷歌日历 API : get list of free slots on specified day