如果我在页面上编写运行JS片段的Chrome扩展程序,它是否也可以在我创建的任何iframe中运行?如果是这样,这是否适用于在DOM加载后由Javascript创建的iframe?
谢谢!
答案 0 :(得分:34)
是的,Chrome扩展程序“内容脚本”可以在所有iframe中运行(最初在加载页面时位于HTML中)。为了让内容脚本在所有框架中运行,您需要使用all_frames
属性在Chrome扩展程序manifest.json中对其进行配置:
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
}
],
...
}
不,内容脚本将 NOT 在通过页面中的JavaScript动态加载的iframe中执行。
答案 1 :(得分:2)
在清单中 (使用"all_frames": true
定义的内容脚本将在新创建的iframe上运行。重要的是,每一帧都将开始新的导航,并且计划在该点插入内容脚本。
相反,如果您使用chrome.tabs.executeScript()
动态注入代码,则该代码只会被注入到您调用它时出现的帧中。如果您想跟上新框架,则需要某种机制来检测新框架(Mutation观察者?webNavigation
API?)。