【问题标题】:Chrome extension enable content script to access iframeChrome 扩展允许内容脚本访问 iframe
【发布时间】:2013-05-20 14:49:33
【问题描述】:

问题很简单:有什么方法可以使内容脚本(通过executeScript())能够访问当前网页(比如stackoverflow.com)上与扩展程序本身具有相同来源的iframe?

休息一下:我知道您可以通过 postMessage、散列等从 iframe 脚本与其父脚本进行通信,但我的主要目标是直接从内容脚本将事件添加到 iframe,而不必传递消息(并创建中间人)。

我相信注入的内容脚本在“他们自己的小世界”页面上运行,页面本身和其他内容脚本都无法访问,因此我相信 Chrome 可能allow 这些脚本可以访问 iframe它自己的来源(扩展 url 本身)。

编辑

澄清一下,iframe 将在协议chrome-extension:// 下拥有 chrome 扩展本身的 url。 iframe 的父页面可以有任何 url,例如 http://stackoverflow.com。因此,尝试从内容脚本访问 iframe 通常不会通过 same-origin-policy...问题是是否有办法使用 Chrome 的扩展库解决此问题。

谢谢!

【问题讨论】:

  • 你找到解决办法了吗?

标签: javascript iframe google-chrome-extension


【解决方案1】:

您当然可以在页面上运行内容脚本并与任何嵌入式 iframe 进行交互。我最近在做一个项目,我需要这样做。

我没有纯 javascript 的解决方案,所以这需要你包含 jQuery.js 库,如果它适合你的话。

在父页面上运行的内容脚本中,我执行了以下操作:

//CAPTURE FRAME LOAD
$("#frameID").load(function () {

    //Create an object for the frame
    var firstFrame = window.parent.frames[0].document;

    //Set JQuery events to run in the context of the frame
    $("#buttonID", firstFrame).click(function(){

        //Capture click event of a button within the frame

    });


});

【讨论】:

  • 感谢您的回复。这我肯定会在同一个域下工作,但是当我的 iframe 有一个chrome-extension 协议,并且页面是一些外国网页(在http:// 下)时,这不会通过相同的来源政策......更新问题以澄清
  • 如果这个 DID 对您有用,您是否做了其他一些事情(可能在清单文件中)使其能够在不同的域下工作?
  • 在我的情况下,父页面(我的内容脚本被挂钩的地方)和 iframe 在同一个域中运行。我想如果不是这种情况,那只是在您的清单权限中声明 iframe 域的情况。
  • 对,我想它是这样的......在我的例子中,iframe 确实来自我的扩展,它的src 是从chrome.extension.getURL() 生成的
  • @QF_Developer 你能看看我的问题吗-stackoverflow.com/questions/19288202/… 好像我想要和他一模一样
猜你喜欢
  • 2011-04-25
  • 2012-07-04
  • 1970-01-01
  • 2022-11-26
  • 2011-09-28
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多