HTML5 междоменная связь не работает

Я открываю 1.htm как http://127.0.0.1/1.html

1.html

<!DOCTYPE html>
<html>
<head>

    </head>
    <body>
       <iframe   id="ifr" src="http://localhost/2.html" width="100%" height="300">
       </iframe>       
        <script>  
            iframe=document.getElementById("ifr");
            iframe.contentWindow.postMessage("hello there", "http://localhost");
     </script>  
    </body> 
    </html>

2.html

<!DOCTYPE html>
<html>
<head>
 <script>
    window.addEventListener("message", function(event) {

    alert(hi);
        if (event.data === "hello there" ) {
            alert("Hi" + event.origin);
        }
    }, false );
</script>

<head>
<body>
Hello world
</body>

"

but I have that error: "Unable to post message to   http://localhost. Recipient has origin  http://127.0.0.1/ 

это простой пример. наконец, мне нужна такая структура: в домене "A" у меня есть iframe, и это src - страница домена "B". в iframe есть кнопка. Когда я нажимаю на эту кнопку, которая отображается внутри iframe, мне нужно вызвать window.addEventListener домена "A", как я могу это сделать?

3 ответа

Как описано здесь. у вас есть только следующие варианты.

Связь между одинаковыми или разными доменными сценариями:

 +-------------------------+-----------+-------------+-------------+
 |                         | home.html | framed.html | helper.html |
 +-------------------------+-----------+-------------+-------------+
 | www.foo.com/home.html   |    N/A    |     YES     |     YES     |
 | www.bar.net/framed.html |    NO     |     N/A     |     YES     |
 | www.foo.com/helper.html |    YES    |     YES     |     N/A     |
 +-------------------------+-----------+-------------+-------------+

Это чисто браузерное ограничение для атаки CSRF (Cross Site Request Forgery). Глядя на ваш сценарий, даже вы работаете в одном домене. Один из вариантов - следовать приведенному выше примеру иерархии, где вы можете передавать сообщения между страницами, даже в пределах одного или разных доменов, используя вспомогательную страницу на родительском сайте. Затем ребенок может принимать и отправлять сообщения через эту страницу помощника.

Решено этим:

<iframe id="frameId" src="http://b.net/2.html"  onload="sendCommand();">  No Frame!</iframe>

            <script  type="text/javascript"> 
                    function sendCommand() {
                    var receiver;
                    receiver = document.getElementById('frameId').contentWindow;
                    receiver.postMessage(receiver, 'http://b.net');
                    }
            </script>

Проверьте файл хоста (C:\Windows\System32\drivers\etc) и убедитесь, что у вас нет сопоставленного localhost, как ничего другого.

Обратите внимание, что доступ к родительскому фрейму от дочернего элемента через Javascript не работает так, как это создает проблему безопасности (межсайтовый скриптинг).

Другие вопросы по тегам