【发布时间】:2012-01-18 21:20:47
【问题描述】:
如果我编写了一个在页面上运行 JS 的 sn-p 的 Chrome 扩展程序,它是否也可以在我创建的任何 iframe 中运行?如果是这样,这是否适用于在 DOM 加载后由 Javascript 创建的 iframe?
谢谢!
【问题讨论】:
标签: iframe google-chrome-extension
如果我编写了一个在页面上运行 JS 的 sn-p 的 Chrome 扩展程序,它是否也可以在我创建的任何 iframe 中运行?如果是这样,这是否适用于在 DOM 加载后由 Javascript 创建的 iframe?
谢谢!
【问题讨论】:
标签: iframe google-chrome-extension
是的,Chrome 扩展“内容脚本”可以在所有 iframe 中运行(在加载页面时最初在 HTML 中)。为了让内容脚本在所有框架中运行,您需要在 Chrome 扩展 manifest.json 中使用 all_frames 属性对其进行配置:
http://code.google.com/chrome/extensions/content_scripts.html
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"],
"js": ["jquery.js", "myscript.js"],
"all_frames": true
}
],
...
}
不,内容脚本将不在页面中通过 JavaScript 动态加载的 iframe 中执行。
【讨论】:
在清单中(使用"all_frames": true)定义的内容脚本将在新创建的 iframe 上运行。重要的是每一帧都会启动一个新的导航,并且计划在该点注入内容脚本。
相反,如果您使用chrome.tabs.executeScript()动态注入代码,那么它只会被注入到您调用它时存在的帧中。如果你想跟上它们,你需要一些机制来检测新帧(突变观察者?webNavigation API?)。
【讨论】: