javascript postMessage не работает - PullRequest
20 голосов
/ 20 июня 2011

Я не знаю, что делать.Я пробовал несколько примеров кодов из разных источников, я пробовал их в разных браузерах (от Chrome 9 до FF 4), и все же, похоже, ничего не работает с функцией «postMessage».Консоль JS ничего не дает, ни единой ошибки, но ничего не происходит: кадры не хотят общаться.Совсем.И это даже не кросс-домен: оба фрейма принадлежат моему домену.

Вот пример кода из последней попытки: Родительский фрейм:

<iframe src="IFRAME_URL"></iframe>
<script>
    window.addEventListener( "message",
      function (e) {
            if(e.origin !== 'DOMAIN'){ return; } 
            alert(e.data);
      },
      false);
</script>

Дочерний фрейм:

<html>
<head></head>
<body>
    <script>
        top.postMessage('hello', 'DOMAIN');
    </script>
</body>

Помощь высоко ценится, большое спасибо

Ответы [ 4 ]

14 голосов
/ 20 июня 2011

Второй параметр вашего postMessage должен быть URL-адресом, подобным http://localhost

1 голос
/ 21 января 2019

Вы также можете отправить сообщение в любое окно, используя top.postMessage('hello', "*");

HTML 1:

<iframe src="IFRAME_URL"></iframe>
<script>
window.addEventListener( "message",
  function (e) { 
        alert(e.data);
  },
  false);
</script>

html 2:

<html>
<head></head>
<body>
    <script>
        top.postMessage('hello', '*');
    </script>
</body>
1 голос
/ 20 апреля 2017

Если вы не имеете дело с разными источниками, введите location.origin в качестве targetOrigin .

top.postMessage('hello', location.origin);
0 голосов
/ 31 октября 2013

Я не уверен в проблемах безопасности, но обычно я просто хватаю местоположение родительского окна следующим образом:

var url = (window.location != window.parent.location) ? document.referrer: document.location;
top.postMessage('message', url);
...