web-dev-qa-db-ja.com

Access-Control-Allow-Originが同じドメイン内のiframeで機能しない

サブドメイン内のiframeにアクセスしようとすると、クロスドメインエラーが発生します。

これがexample。mydomain.com/iframe_test.htmlのコードです。

<html>
<head>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
    <iframe src="http://example2.mydomain.com/welcome.php" width="1000" height="600"></iframe>
    <script>
        $(document).ready(function()
        {
            setTimeout(function(){
                $('#innerdiv',$('iframe').contents()).hide();
            },5000);
        });
    </script>
</body>
</html>



そして、これがexample2。mydomain.com/welcome.phpのコードです。

<?php
header("Access-Control-Allow-Origin: " . "*");
?>
<html>
<head>

</head>
<body>
    <div id="innerdiv">
        hello
    </div>
</body>
</html>



$( '#innerdiv'、$( 'iframe')。contents())。hide()という行を実行すると、次のエラーが発生します。

Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with Origin "http://example.mydomain.com" from accessing a frame with Origin "http://example2.mydomain.com". Protocols, domains, and ports must match. 


Fiddlerで、welcome.phpの応答でAccess-Control-Allow-Originヘッダーが本当に返されたことを確認しました

サブドメイン内のiframeのコンテンツにアクセスすることは可能ですか?

10
Edi

Access-Control-Allow-OriginはXHRにのみ使用されます。

必要なものは Same Origin Policy と呼ばれます。

追加する必要がありますdocument.domain = 'example.com'をページに追加します。

18
Alexey Ten