Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中_Javascript_Google Chrome_Google Chrome Extension_Content Script - Fatal编程技术网

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

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"],

在我的chrome扩展的内容脚本中,一旦外部js文件加载完成,我会将其动态加载到html页面上。我加载的这个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链接到的答案中的方法之一。