我目前正在与 Crossrider 一起开发扩展。我现在正在使其在 IE 和 Chrome 上也能运行。该扩展将 IFrame 添加到每个页面作为侧边栏,并通过 iframe 与父窗口进行交互。为了实现这项工作,我使用 Crossriders“建议”使用 iframe 的数据编码 block 而不是 URL 来解决同一域的安全问题。
这在 Firefox 中有效(并且在 IE 中也有一些黑客攻击),但是在 Chrome 中我遇到了以下问题:
Blocked a frame with origin "null" from accessing a cross-origin frame.
据我所知,解决这个问题的唯一方法是实际上位于同一个域(不可能,因为该插件适用于每个网站)或使用跨窗口消息传递(因为我们与父级有丰富的交互)高架)。所以我的问题是,如何配置覆盖或其他任何内容来修复 Chrome 的此问题,有办法吗?作为一种快速解决方案,它甚至可以是我必须在 Chrome 中进行的设置。
但总的来说,我认为应该有办法解决这个问题,因为最终我已经拥有对浏览器的完全访问权限,因为安装了扩展程序,所以我认为我应该能够以某种方式覆盖它?
最佳答案
一般来说,iframe 受到浏览器实现的安全策略的保护。因此,iframe 和在其父页面上运行的扩展之间进行交互的最简单方法是在它们之间发送消息。
您可以通过在 IDE 中启用(设置>)在 Iframe 中运行功能来实现此目的,然后在 extension.js 中区分 iframe 及其父级代码。以下示例应该可以帮助您理解总体思路:
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.isIframe , appAPI.message.toCurrentTabIframes ,和appAPI.message.toCurrentTabWindow .
[披露:我是 Crossrider 员工]
关于javascript - 浏览器扩展 (CrossRider) iframe 来源和父访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379866/