Chrome扩展程序:Chrome扩展程序中的变量未定义,即使它存在于控制台中

时间:2015-06-23 21:07:44

标签: javascript google-chrome google-chrome-extension content-script

在我的Chrome扩展程序的内容脚本中,一旦完成加载,我会将外部js文件动态加载到html页面上。我加载的这个js文件将定义一个名为rfk的变量。我在设置rfk时设置了Interval,它将执行一个脚本。但是,即使在成功加载页面后,即使我可以通过浏览器控制台检查并发现rfk存在,我的内容脚本也永远不会找到rfk

"content_scripts": [
    {
        "matches": ["*://www.att.com/*"],
        "js": ["att.js"],
        "run_at":"document_end"
    }
]

这是我的att.js文件中的代码片段:

alert('hey!');

document.body.style.backgroundColor="red";

var url="//product.reflektion.com/rfk/js/11165-52846072/init.js?cv=test&q="+(new Date).getTime()
, o = document, s = o.createElement("script");

s.type="text/javascript";
s.src=url;
o.getElementsByTagName("head")[0].appendChild(s);

var cE = setInterval(function(){
    rfk && (demo="instagram",rfk.P.fs.rw.extra_args={drsp:{_v:demo}},rfk.rebuild(),clearInterval(cE))
},100);

1 个答案:

答案 0 :(得分:1)

Isolated world问题。

  

内容脚本在称为孤立世界的特殊环境中执行。他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数。它将每个内容脚本视为在其运行的页面上没有执行其他JavaScript。反过来也是如此:页面上运行的JavaScript无法调用任何函数或访问内容脚本定义的任何变量。

您的内容脚本永远不会看到页面定义的变量。在控制台中,您(默认情况下)查看页面的上下文,而不是内容脚本的上下文。您可以切换(在<top frame>下拉列表中)进行测试。

你需要inject a page-level script对页面自己的JS做任何事情。