【问题标题】:Chrome extensions: variable undefined in chrome extension even though it exists in consoleChrome 扩展:chrome 扩展中未定义的变量,即使它存在于控制台中
【发布时间】:2015-09-09 21:19:19
【问题描述】:

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

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

这是我 att.js 文件中的代码 sn-p:

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);

【问题讨论】:

  • 呃……你到底想在这里做什么?
  • 顺便说一句,这是一个基本的内容脚本。 “动态加载”是使用 chrome.tabs.executeScript 或使用 Xan 链接到的答案中的一种方法。

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


【解决方案1】:

Isolated world 问题。

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

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

您需要inject a page-level script 才能对页面自己的 JS 进行任何操作。

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2021-04-18
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多