【问题标题】:Do Chrome extensions access iframes?Chrome 扩展程序可以访问 iframe 吗?
【发布时间】:2012-01-18 21:20:47
【问题描述】:

如果我编写了一个在页面上运行 JS 的 sn-p 的 Chrome 扩展程序,它是否也可以在我创建的任何 iframe 中运行?如果是这样,这是否适用于在 DOM 加载后由 Javascript 创建的 iframe?

谢谢!

【问题讨论】:

    标签: iframe google-chrome-extension


    【解决方案1】:

    是的,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 中执行。

    【讨论】:

    • 有没有办法让内容脚本也在动态加载的 JS 上执行?还是根本不可能?
    • @Honoki 我不相信有任何方法可以让 Chrome 扩展在页面加载后将 JS 添加到 JavaScript 中动态添加的 iframe。但是,如果您控制 iframe 的内容,那么您可以做任何您想做的事情。你想在 iframe 中加载什么?也许有一个 Web API 可以满足您的需要 - 如果没有 Yahoo 管道 + YQL 可以方便地从其他没有很好的 Web/REST API 的站点中获取内容。
    • 从我的实验看来,contentscripts do 会在新创建的 iframe 中执行......还请注意,它正在运行您的 contentscript.js 的单独副本,每个 iframe 一次(尽管理论上它们可以通过消息传递相互通信),并且一次用于主文档......
    • 但是清单中指定的 css 并没有渗透到 iframe 中...
    【解决方案2】:

    在清单中(使用"all_frames": true)定义的内容脚本将在新创建的 iframe 上运行。重要的是每一帧都会启动一个新的导航,并且计划在该点注入内容脚本。

    相反,如果您使用chrome.tabs.executeScript()动态注入代码,那么它只会被注入到您调用它时存在的帧中。如果你想跟上它们,你需要一些机制来检测新帧(突变观察者?webNavigation API?)。

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      相关资源
      最近更新 更多