Google chrome extension 从内容脚本访问窗口变量

Google chrome extension 从内容脚本访问窗口变量,google-chrome-extension,sandbox,content-script,Google Chrome Extension,Sandbox,Content Script,我有一个Chrome扩展,它试图在每个浏览过的URL(以及每个浏览器URL的每个iframe)上查找是否存在变量窗口。我的变量\u name存在 所以我写了一小段内容脚本: function detectVariable(){ if(window.my_variable_name || typeof my_variable_name !== "undefined") return true; return false; } 尝试太久之后,内容脚本似乎在一些沙箱中运行 有没有办法

我有一个Chrome扩展,它试图在每个浏览过的URL(以及每个浏览器URL的每个iframe)上查找是否存在变量
窗口。我的变量\u name
存在

所以我写了一小段内容脚本:

function detectVariable(){
    if(window.my_variable_name || typeof my_variable_name !== "undefined") return true;
    return false;
}
尝试太久之后,内容脚本似乎在一些沙箱中运行


有没有办法从Chrome内容脚本访问
窗口
元素?

需要知道的一点是,内容脚本与当前页面共享同一DOM,但它们不共享对变量的访问。处理这种情况的最佳方法是,从内容脚本向当前DOM中注入一个脚本标记,该标记将读取页面中的变量

在manifest.json中:

"web_accessible_resources" : ["/js/my_file.js"],
在contentScript.js中:

function injectScript(file, node) {
    var th = document.getElementsByTagName(node)[0];
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', file);
    th.appendChild(s);
}
injectScript( chrome.extension.getURL('/js/my_file.js'), 'body');
在my_file.js中:

// Read your variable from here and do stuff with it
console.log(window.my_variable);

顺便说一句,如果您从以下方面开始,您不会尝试太久:内容脚本在一个称为孤立世界的特殊环境中执行[…],它比这更复杂。我成功地
console.log
了一个类似于熟悉的
窗口
元素的东西(但它是一个虚拟元素)。所以我认为文档已经过时了,这有时会发生在Chrome扩展上。我最终设法解决了我的问题,将读取变量的代码注入到页面中,而不是试图从内容脚本中读取变量(见下文)。我编写了一个简单的模块,帮助您轻松地从Chrome extensions在网页上运行JavaScript代码。可能会帮助到这里的任何人:web\u accessible\u资源中声明的javascript必须是我的\u文件,才能加载到页面中。但是如果我需要内容脚本来访问扩展功能和窗口对象,该怎么办?如何将window.my\u变量添加到contentScript.js中?为什么要通过“web\u可访问的\u资源”:[“/js/my\u file.js”]和contentScript.js:too?注入的脚本可以将
窗口.my\u变量
存储在DOM中,例如作为新
元素的值