Chrome扩展程序无法访问自定义窗口属性

时间:2016-12-15 10:12:29

标签: 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函数。我需要制作类似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

我还有一个pannel,当点击一个按钮时,它会向后台页面发送一条消息。我知道面板和发送消息也有效。但window.myTest仍为undefined

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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