1

尝试在 chrome 扩展中加载第三方所见即所得编辑器时出现以下错误。

沙盒访问冲突:阻止“chrome-extension://cmcjindomengjienigbcldekcfnhfped”处的框架访问“null”处的框架。两个框架都是沙盒的,并且缺少“允许同源”标志。

我最初遇到了类似的错误,并设法通过添加allow-same-origin标志来解决它。这导致另一个需要允许脚本标志的错误。下面是 iframe 元素的当前状态

<iframe sandbox="allow-same-origin allow-scripts" src="editor.html" width="350" height="350" style="border:none;"></iframe>

所见即所得的编辑器会动态创建一个 iframe 来保存编辑器。我假设这可能会触发错误的第二个实例。我尝试在沙盒页面中创建的 iframe 上设置 allow-same-origin标志,但这什么也没做。

我可以尝试另一种选择,但由于这也是一次学习冒险,我很想解决这个问题。

编辑: 我尝试用 div 替换动态创建的 iframe 只是为了看看会发生什么。我没有收到上面的错误,但正如预期的那样,当访问与 iframe 相关的属性时,代码失败了。这并不能证明新的 iframe 是问题所在,但它确实可能是。

编辑 2 FWIW,下面的行是引发错误的地方

this.e = this.i.contentWindow.document;

它之前被初始化为

this.i = document.createElement('iframe');
4

1 回答 1

2

如果您对 iframe 进行沙箱处理,则无法从外部访问其内容。然后,您应该使用 postMessage 在用户代理之间进行通信。

通过在同一域上加载的 iframe 上同时使用 allow-same-origin 和 allow-scripts 允许 iframe 删除沙盒属性。

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-if​​rame-element.html#attr-iframe-sandbox

当嵌入页面与包含 iframe 的页面具有相同的来源时,将 allow-scripts 和 allow-same-origin 关键字一起设置允许嵌入页面简单地删除沙箱属性然后重新加载自身,从而有效地完全脱离沙箱.

于 2013-07-29T19:40:35.923 回答