【问题标题】:Chrome extension can not access custom window propertiesChrome 扩展程序无法访问自定义窗口属性
【发布时间】:2016-12-15 10:12:28
【问题描述】:

我正在尝试编写一个具有开发工具面板的 Chrome 扩展程序。这个扩展需要调用我也制作的网页中窗口属性上定义的函数。换句话说,扩展只适用于我自己的网页,我控制两者。示例:

// This script is added in my own webpage application when it loads
window.myTest = () => { /* do something */ }

我希望能够从我的 Chrome 扩展程序中调用函数 window.myTest。我需要制作类似https://github.com/zalmoxisus/redux-devtools-extension 的功能。

看来我需要通过从我的后端页面注入脚本/代码来做到这一点。我已经完成了所有工作,带有被调用的后端页面的扩展,我可以看到我注入的代码在页面上下文中被调用(通过 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>"
  ]
}

testscript.js

window.myTest(); // myTest is undefined in the context of the injected script

background.js

// empty, but here to be able to open background page

我还有一个面板,可以在单击按钮时向后台页面发送消息。我知道面板和发送消息也可以。但是window.myTest 仍然是undefined

编辑 从 background.js 中删除了注入,因为我没有使用它并且遇到了与描述相同的问题。

【问题讨论】:

  • 您不必手动注入 testscript.js,只要您在清单“content_scripts”部分声明即可。
  • 如果使用类似setTimeout(func, 5000) 的方式调用window.myTest() 会怎样?我的意思是你能确保在注入脚本运行时声明了myTest 吗?
  • 如果这是一个你也制作的网页,那么注入&lt;all_urls&gt;是不合适的。您应该将您的 matches 限制在您正在影响的页面上。
  • @AndreaConte,虽然 OP 显然不需要通过 both 一个 manifest.json content_scripts 条目将相同的脚本注入页面 tabs.executeScript(),对于仅在用户打开 DevTools 的罕见情况下与页面交互的扩展,使用 tabs.executeScript() 注入可能更合适,因此注入仅在需要功能时发生,而不是在绝大多数时间永远不会使用时注入。我们不知道哪个更好,因为 OP 没有分享足够的信息。

标签: google-chrome google-chrome-extension


【解决方案1】:

最后,我得到了这方面的规格。 Mozilla 和 Chrome 遵循相同的扩展规范。

内容脚本获得 DOM 的“干净”视图。这意味着:

  • 内容脚本看不到页面定义的 JavaScript 变量 脚本。
  • 如果页面脚本重新定义了内置 DOM 属性,则 内容脚本查看属性的原始版本,而不是 重新定义的版本。

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多