Javascript Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中
在我的chrome扩展的内容脚本中,一旦外部js文件加载完成,我会将其动态加载到html页面上。我加载的这个js文件将定义一个名为Javascript Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中,javascript,google-chrome,google-chrome-extension,content-script,Javascript,Google Chrome,Google Chrome Extension,Content Script,在我的chrome扩展的内容脚本中,一旦外部js文件加载完成,我会将其动态加载到html页面上。我加载的这个js文件将定义一个名为rfk的变量。我为定义rfk设置了一个间隔,它将执行一个脚本。但是,即使成功加载页面,我的内容脚本也不会找到要定义的rfk,即使我可以通过浏览器控制台检查并发现rfk存在 "content_scripts": [ { "matches": ["*://www.att.com/*"], "js": ["att.js"],
rfk
的变量。我为定义rfk
设置了一个间隔,它将执行一个脚本。但是,即使成功加载页面,我的内容脚本也不会找到要定义的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);
问题
内容脚本在称为隔离世界的特殊环境中执行。它们可以访问所注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数。对于每个内容脚本,它看起来就像在其运行的页面上没有其他JavaScript执行一样。反过来也是如此:页面上运行的JavaScript不能调用任何函数或访问内容脚本定义的任何变量
您的内容脚本将永远看不到页面定义的变量。在控制台中,您(默认情况下)查看的是页面的上下文,而不是内容脚本的上下文。您可以将其(在
下拉列表中)切换到test
你需要用页面自己的JS做任何事情。呃……你到底想在这里做什么?顺便说一句,这是一个基本的内容脚本。“动态加载”正在使用或使用Xan链接到的答案中的方法之一。