Google chrome Chrome扩展无法访问自定义窗口属性
我正在尝试编写一个带有开发工具面板的Chrome扩展。此扩展需要调用在我也创建的网页中的窗口属性上定义的函数。换句话说,扩展只用于我自己的网页,我控制这两个网页。例如:Google chrome Chrome扩展无法访问自定义窗口属性,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我正在尝试编写一个带有开发工具面板的Chrome扩展。此扩展需要调用在我也创建的网页中的窗口属性上定义的函数。换句话说,扩展只用于我自己的网页,我控制这两个网页。例如: // This script is added in my own webpage application when it loads window.myTest = () => { /* do something */ } 我希望能够从我的Chrome扩展中调用函数window.myTest。我需要做类似的功能,如 似
// This script is added in my own webpage application when it loads
window.myTest = () => { /* do something */ }
我希望能够从我的Chrome扩展中调用函数window.myTest
。我需要做类似的功能,如
似乎我需要通过从后端页面注入脚本/代码来实现这一点。我有所有可以调用的后端页面扩展,我可以看到我注入的代码在页面上下文中被调用(通过console.log进行测试写入页面的控制台输出)
这是我的密码:
manifest.json
{
"manifest_version": 2,
"name": "MyTest",
"description": "MyTest",
"version": "0.0.1",
"minimum_chrome_version": "10.0",
"devtools_page": "devtools.html",
"background": {
"scripts": ["background.js"]
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["testscript.js"]
}],
"permissions": [
"tabs",
"<all_urls>"
]
}
background.js
// empty, but here to be able to open background page
我还有一个面板,当点击按钮时,它会向后台页面发送消息。我知道专家组和发送信息也能起作用。但是window.myTest
仍然是未定义的
编辑
从background.js中删除了注入,因为我没有使用它,并且出现了与前面描述的相同的问题。最后,我得到了关于这个的规范。Mozilla和Chrome遵循相同的扩展规范
内容脚本获得DOM的“干净”视图。这意味着:
- 内容脚本无法查看页面定义的JavaScript变量
脚本
- 如果页面脚本重新定义内置DOM属性,则
内容脚本看到的是属性的原始版本,而不是
重新定义的版本
只要在清单“内容脚本”部分声明testscript.js,就不必手动注入它。如果使用类似于setTimeout(func,5000)
的方法调用window.myTest()
,会怎么样?我的意思是,您能否确保在注入脚本运行时声明了myTest
?如果这是针对您制作的网页的,则不适合注入
。您应该将您的匹配项
仅限于您正在影响的页面。@AndreaConte,而OP显然不需要通过manifest.jsoncontent\u脚本
条目和tabs.executeScript()
,将相同的脚本注入页面,对于仅在用户打开DevTools的罕见情况下与页面交互的扩展,使用tabs.executeScript()
进行注入可能更合适,因此注入仅在需要功能时发生,而不是总是被注射时,绝大多数时间它永远不会被使用。我们不知道哪个更好,因为OP没有分享足够的信息。
// empty, but here to be able to open background page