Подтвердить что ты не робот

Javascript postMessage не работает

Я не знаю, что делать. Я попробовал несколько примеров кода из разных источников, я попробовал их в разных браузерах (от 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>

Помогите оценить, спасибо большое

4b9b3361

Ответ 1

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

Ответ 2

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

top.postMessage('hello', location.origin);

Ответ 3

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

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

Ответ 4

Вы также можете отправить сообщение в любое окно, используя 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>