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

时间:2018-06-06 14:57:59

标签: iframe amp-html

我收到此错误:

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.

我的放大器iframe看起来像这样(这是一个哈巴狗模板):

<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",应该允许成功加载此框架。

接下来是另一个错误:Uncaught TypeError: Cannot read property 'contentWindow' of null由amp-iframe.js抛出

任何人都可以对此有所了解。当然&#34;允许 - 同源&#34;意味着我应该能够在同一主机上拥有一个iframe,即localhost:3000

我还注意到使用amp-web-push可以设置iframe(helper-iframe-url =&#34; https:// localhost:3000 / amp-web-push-helper- frame.html&#34;)这个放大器将使用相同的沙盒设置加载到同一个原点。

2 个答案:

答案 0 :(得分:1)

问题在于,如果合并allow-scriptsallow-same-origin,同一来源的iframe可以访问父文档。

  

将allow-scripts和allow-same-origin关键字一起设置   当嵌入页面与包含该页面的页面具有相同的原点时   iframe允许嵌入页面简单地删除沙箱属性   然后重新加载自己,有效地打破沙箱   共

https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-sandbox

但是,必须以某种方式构建AMP页面,以便可以从不同的来源(例如cdn.ampproject.org)提供服务。如果amp-iframe允许为同一来源的iframe设置allow-scriptsallow-same-origin,则如果AMP文档是从其他来源提供的,则行为可能会中断。为避免这种情况,使用allow-same-origin时,需要从其他(子)域提供iframe。

答案 1 :(得分:1)

正如amp所建议的那样,“因为可以测试AMP,所以可以很容易地规避AMP的不相同来源执行,因为仅测试了初始URL”。

要获得重定向,我正在使用从tinyURL网站生成的url。我创建了一个URL的tinyURL并将其放置在src或amp-iframe中,并且可以正常工作。