如果设置了 allow-same-origin,则 amp-iframe 的原点必须不等于容器。

问题描述 投票:1回答:2

我得到了这个错误。

Origin of <amp-iframe> must not be equal to container
<amp-iframe sandbox=​"allow-scripts allow-same-origin" layout=​"nodisplay" frameborder=​"0" src=​"https:​/​/​localhost:​3000/​team-tracker-frame.html?team=reading" class=​"i-amphtml-element i-amphtml-layout-responsive i-amphtml-layout-size-defined i-amphtml-error i-amphtml-layout">​…​</amp-iframe>​ 
if allow-same-origin is set. 
See https://github.com/ampproject/amphtml/blob/master/spec/amp-iframe-origin-policy.md for details.

我的amp iframe看起来像这样(这是一个pug模板)。

<amp-iframe 
  sandbox="allow-scripts allow-same-origin" 
  layout="nodisplay" frameborder="0" 
  src="https://localhost:3000/team-tracker-frame.html?team=reading">
</amp-iframe>

我的理解和直觉告诉我,通过提供... sandbox="allow-same-origin" 应该可以让这个框架成功加载。

紧接着是另一个错误,由amp-iframe.js抛出。Uncaught TypeError: Cannot read property 'contentWindow' of null amp-iframe.js抛出的错误。

谁能给点提示。当然,"ALLOW-same-origin "意味着我应该能够在同一主机上有一个iframe,即localhost:3000。

我还注意到,使用amp-web-push可以让你设置一个iframe(helper-iframe-url="https:/localhost:3000amp-web-push-helper-frame.html"),amp会很高兴地用同样的沙盒设置在同一个源头上加载。

iframe amp-html
2个回答
1
投票

的问题是,在同一源头的iframe可以访问父文档,如果 allow-scriptsallow-same-origin 组合在一起。

当嵌入的页面与包含iframe的页面具有相同的来源时,同时设置allow-scripts和allow-same-origin这两个关键字,可以让嵌入的页面简单地删除沙盒属性,然后自己重新加载,有效地完全脱离沙盒。

https:/html.spec.whatwg.orgmultipageiframe-embed-object.html#attr-iframe-sandbox。

然而,AMP页面必须以一种方式建立,以便它们可以从不同的来源(例如cdn.ampproject.org)提供服务。如果 amp-iframe 将允许设置 allow-scriptsallow-same-origin 的同源iframe,如果AMP文档从不同的源头服务,行为可能会被破坏。为了避免这种情况,当使用 allow-same-origin.


1
投票

正如amp所建议的那样,"一个人可以通过重定向轻松地规避AMP的非同源执行,因为只有初始URL是测试的"。

为了得到一个重定向,我正在使用从tinyURL网站生成的url。我为我的url创建了一个tinyURL,并放在src或amp-iframe中,然后它就工作了。

© www.soinside.com 2019 - 2024. All rights reserved.