policyAMPページにおけるエラーこのブログのAMPページの<amp-iframe>で、下記のエラーが出て困っていた。<amp-iframe>のオリジンはコンテナと同じであってはいけません。sandbox属性にはallow-same-origin属性は入れているのだが。エラーの続きには以下のメッセージが続いていた。メッセージ的には分割して表示されてしまっているのだが。details.合わせるとこういうことか。details.もしallow-same-originをセットしているのなら、<amp-iframe>のオリジンはコンテナと同じであってはいけません。srcを許して」いるのに同じオリジンであってはいけないとはどういうことか。そもそもオリジンって何だ?Origin(オリジン)とはオリジンは以下で定義される。スキームホスト名ポートドメインなので、同一のオリジンとはスキームが同じホスト名が同じポートが同じドメインが同じとなる。https://aaa.bbb.zzz/aaa/bbb.htmlhttps://aaa.bbb.zzz/ccc.htmlは同一オリジンだけど、https://aaa.bbb.zzz/aaa/bbb.htmlhttp://aaa.bbb.zzz/aaa/bbb.htmlhttp://aaa.bbb.zzz:8080/aaa/bbb.htmlhttps://ddd.bbb.zzz/ccc.htmlはすべて異なるオリジンということになる。異なるオリジンのページへのスクリプトアクセス異なるオリジンのページ同士はスクリプトアクセスが制限される。具体的にはwindow・Locationのメソッド・プロパティに制約を受ける。書き込みのみ上記以外のwindow,locationのメソッド・属性は使用できないということか。MDN」を読むと、私はsandbox属性に関して何もわかっていないことが分かった。sandboxは空文字指定で最大の制約がかかる。指定がないと制約がかからない。以下のトークンを文字列にスペース区切りで含めることにより、指定した制約が解除される。コンテンツが同一オリジンを持つとみなす。srcを同じオリジンだとみなすという部分。srcが読み込めないはずないもんね。あとMDNには以下のことが書いてあった。同一オリジンの場合はallow-scriptsとallow-same-originの同時利用は避けることを推奨。sandboxを指定しないのと同様の危険性がある。policyallow-same-originを誤解していたことがわかり、sandboxが理解できたところで、エラーメッセージのURLのドキュメントを見ると、わりと理解できたような気がしたが、今いち自信がないね。AMPはAMPプロキシでキャッシュされるので、必ずオリジンのホストからページが供給されるとは限らない。<amp-iframe>内のページのJSがホストしているページが同じオリジンであることを前提に作られていると、AMPプロキシでキャッシュされた場合不具合が起こる可能性がある。(クロスiframeアクセス)を使用しているものを考える。AMPページはキャッシュされ、別オリジンで提供され、<amp-iframe>内のページはキャッシュされない(ユーザーJSが動いている時点でAMPの要件を満たさないからかな・・)可能性がある。その場合別オリジンとなってホストページ<->iframeアクセスに制限がかかり不具合が発生する可能性がある。AMPは上記不具合を回避するため、「sandbox属性でallow-same-originを指定した場合は<amp-iframe>のsrcは別オリジンでなければならない」ルールを定めている。<amp-iframe>のコードは別オリジンを前提とすることを強制させるのである。container」エラーが発生する。ホストページに対してはpostMessageのみ利用可能な制限がかかる。このルールはsandobox属性でallow-same-originを指定しない場合は適用されない。別オリジンの場合のiframe制約がかかる。するとあれだな、<amp-iframe>のsrcがホストページと同じオリジンならallow-same-originは指定しない。<amp-iframe>のsrcがホストページと異なるオリジンで、同じオリジンとみなしたいのであればallow-same-originを指定する。いうことをすればよいのだろうかね。