在我的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);
答案 0 :(得分:1)
内容脚本在称为孤立世界的特殊环境中执行。他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数。它将每个内容脚本视为在其运行的页面上没有执行其他JavaScript。反过来也是如此:页面上运行的JavaScript无法调用任何函数或访问内容脚本定义的任何变量。
您的内容脚本永远不会看到页面定义的变量。在控制台中,您(默认情况下)查看页面的上下文,而不是内容脚本的上下文。您可以切换(在<top frame>
下拉列表中)进行测试。
你需要inject a page-level script对页面自己的JS做任何事情。