我收到此错误:
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;)这个放大器将使用相同的沙盒设置加载到同一个原点。
答案 0 :(得分:1)
问题在于,如果合并allow-scripts
和allow-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-scripts
和allow-same-origin
,则如果AMP文档是从其他来源提供的,则行为可能会中断。为避免这种情况,使用allow-same-origin
时,需要从其他(子)域提供iframe。
答案 1 :(得分:1)
正如amp所建议的那样,“因为可以测试AMP,所以可以很容易地规避AMP的不相同来源执行,因为仅测试了初始URL”。
要获得重定向,我正在使用从tinyURL网站生成的url。我创建了一个URL的tinyURL并将其放置在src或amp-iframe中,并且可以正常工作。