Access-Control-Allow-Origin не работает для iframe в том же домене

Я пытаюсь получить доступ к iframe в поддомене и получаю ошибку междоменного доступа.

Вот код примера.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, что заголовок Access-Control-Allow-Origin действительно был возвращен в ответе welcome.php

Можно ли получить доступ к содержимому iframe в поддомене?


person Edi    schedule 29.04.2014    source источник


Ответы (2)


Access-Control-Allow-Origin используется только для XHR.

То, что вам нужно, называется Same Origin Policy.

Вы должны добавить document.domain = 'example.com' на свои страницы.

person Alexey Ten    schedule 29.04.2014
comment
Куда мы должны добавить этот материал document.domain? Можете ли вы уточнить немного больше. Спасибо. - person Saeed Neamati; 08.02.2015
comment
@SaeedNeamati Вам нужно добавить его на обе страницы в тег скрипта. В основном главная страница и страница iframe должны иметь набор <script>document.domain = 'example.com'</script> - person Maksim Luzik; 11.03.2015
comment
Это не работает, я получаю: Uncaught SecurityError: Failed to set the 'domain' property on 'Document': 'example.com' is not a suffix of ''. - person Mike R; 02.06.2015
comment
@MikeR какой адрес вашего документа? - person Alexey Ten; 02.06.2015
comment
‹script›document.domain = 'example.com'‹/script› где именно вставить.? Я вставил его, но не работает должным образом. - person Sayuj3; 07.01.2017
comment
Необходимо использовать document.domain = 'localhost'; или ваш домен Вы должны открывать на веб-сервере, а не в локальном файле - person tarn; 17.04.2017

Я нашел это решение о «Access-Control-Allow-Origin» в custom.unified.js с темой wordpress divi, и я исправил, поставив это условие

        if (window.parent != window.top) {
    window.top && window.top.__Cypress__ ? r = window.parent === window.top ? window : window.parent : window.top && (r = window.top, window.top, window.self)
    }
person dali    schedule 07.02.2020