Javascript 正在访问Google Analytics窗口。\u来自Chrome扩展的gaq

Javascript 正在访问Google Analytics窗口。\u来自Chrome扩展的gaq,javascript,google-chrome,google-chrome-extension,google-analytics,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

我正在编写一个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.\u gaq和window.\u gaq.\u getAsyncTracker()。\u getAccount()都可以通过控制台访问,并返回我期望的结果

为什么在通过侦听器访问时未定义window.\u gaq?我应该如何从chrome扩展访问它?

我有一个想法,这是一个安全的原因,所以我也试图修改清单,包括以下内容,但仍然没有运气

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
我想第二个问题是:


是我试图以我所使用的方式实现的目标(我已经在页面内容上使用正则表达式匹配获得了类似的结果,但希望直接访问对象)

这与内容安全策略无关。我认为您正在向网页中注入内容脚本,并尝试访问网页中的变量。因为内容脚本是在一个孤立的世界中执行的,所以不能直接执行。有关更多详细信息,请参阅

要访问web页面中的变量(在您的情况下是必需的),必须在页面中插入标记。在该脚本中检索Google Analytics ID,并与内容脚本()通信,让内容脚本将其发送回您的扩展

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


还请注意,chrome.extension.onRequest/sendRequest已经被弃用了很长一段时间()。您应该改用onMessage/sendMessage。

这与内容安全策略无关。我认为您正在向网页中注入内容脚本,并尝试访问网页中的变量。因为内容脚本是在一个孤立的世界中执行的,所以不能直接执行。有关更多详细信息,请参阅

要访问web页面中的变量(在您的情况下是必需的),必须在页面中插入标记。在该脚本中检索Google Analytics ID,并与内容脚本()通信,让内容脚本将其发送回您的扩展

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


还请注意,chrome.extension.onRequest/sendRequest已经被弃用了很长一段时间()。你应该改为使用onMessage/sendMessage。

虽然我并不特别为这一个感到自豪,但它确实有效;我认为如果不向页面中注入另一个脚本,就无法访问页面上的变量

var find_ga_account = function(){
    var scripts = document.querySelectorAll('script:not([src])'),
        i = 0,
        match,
        ua = false;

    for( ; i < scripts.length; i++){
        match = scripts[i].textContent.match(/_setAccount['"]+,[\s]?['"]+(.*)['"]+/)
        if(match && match.length > 0){
            ua = match[1];
        }
    }
    return ua;
}
var find_ga_account=function(){
var scripts=document.querySelectorAll('script:not([src])),
i=0,
火柴
ua=假;
对于(;i0){
ua=匹配[1];
}
}
返回ua;
}

尽管我并不特别为这一点感到自豪,但它是有效的;我认为,如果不向页面中注入另一个脚本,您就无法访问页面上的变量

var find_ga_account = function(){
    var scripts = document.querySelectorAll('script:not([src])'),
        i = 0,
        match,
        ua = false;

    for( ; i < scripts.length; i++){
        match = scripts[i].textContent.match(/_setAccount['"]+,[\s]?['"]+(.*)['"]+/)
        if(match && match.length > 0){
            ua = match[1];
        }
    }
    return ua;
}
var find_ga_account=function(){
var scripts=document.querySelectorAll('script:not([src])),
i=0,
火柴
ua=假;
对于(;i0){
ua=匹配[1];
}
}
返回ua;
}