浏览器扩展(CrossRider)iframe原点和父访问

时间:2015-07-13 09:34:08

标签: javascript google-chrome iframe same-origin-policy crossrider

我正在与Crossrider合作开发一个扩展。我现在正在使其在IE和Chrome上运行。该扩展程序将IFrame作为侧边栏添加到每个页面,并从iframe与父窗口进行交互。为了完成这项工作,我使用Crossriders“建议”使用iframe的数据编码块而不是URL来解决相同的域问题以确保安全。

这适用于Firefox(并且在IE中也有一些黑客攻击),但在Chrome中我有以下问题:

  

阻止原始“null”的帧访问跨源   帧。

从我读到的唯一方法是实际上是在同一个域(不适用于插件适用于每个网站)或使用跨窗口消息传递(因为我们与父母的很多交互很多高架)。所以我的问题是,我如何配置覆盖或为Chrome修复此问题,是否有办法?作为一个快速的工作,它甚至可以是我必须做的设置铬。

但总的来说我觉得应该有办法解决这个问题,因为最后我已经完全访问了浏览器,因为扩展已经安装,所以我想我应该能够以某种方式覆盖它?

2 个答案:

答案 0 :(得分:2)

通常,iframe受浏览器实施的安全策略保护。因此,在iframe和在其父页面上运行的扩展之间进行交互的最简单方法是在它们之间发送消息。

您可以通过在IDE中启用(设置>)在Iframes中运行功能,然后在 extension.js 代码。以下示例可帮助您理解一般概念:

extension.js

appAPI.ready(function($) {
  if (appAPI.dom.isIframe()) {
    // iframe code
    appAPI.message.addListener(function(msg) {
      if (msg.action === 'someAction') {
        ...
        // send response
        appAPI.message.toCurrentTabWindow({
          action:'otherAction',
          response:'otherResponse'
        });
      }
    });
    // end iframe code
    return;
  }
  // Parent window code
  appAPI.message.addListener(function(msg) {
    if (msg.action === 'otherAction') {
      ...
      // send response
      appAPI.message.toCurrentTabIframes({
        action:'someAction',
        response:'someResponse'
      });
    }
  });
});

有关示例中使用的方法的详细信息,请参阅appAPI.dom.isIframeappAPI.message.toCurrentTabIframesappAPI.message.toCurrentTabWindow

[披露:我是Crossrider员工]

答案 1 :(得分:1)

您可以将对象网址用作iframe src。他们认为与创建页面的起源相同。 https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL