IE8/9 window.postMessage не работает, но почему?
"postMessage" - это API HTML5, он доступен во всех основных браузерах, включая IE8/9. Я пытаюсь создать всплывающее окно со страницы и иметь возможность поговорить со всплывающим окном, используя "postMessage". Это работает в каждом браузере, кроме IE8/9. Разочарованный!
Похоже, что IE8/9 поддерживает только связь между iframe, но не между двумя окнами, даже окна находятся в одной иерархии.
Ответы
Ответ 1
Метод .postMessage
работает, вам просто нужно понять, как он работает с IE8 и выше. К сожалению, для IE8 и IE9 он не будет делать то, что вы ищете (хотя в IE10). Хотя вы можете отправлять сообщения между кадрами в IE8/9, вы не можете отправлять сообщения в отдельное окно.
В некоторых случаях работает работа. Мартин Биби обсуждает его в последнем абзаце своего блога о проблеме: PostMessage Popups и IE.
Подробнее об этом и о нескольких других предостережениях см. в статье Eric Lawrence в MSDN.
Ответ 2
Я обнаружил, что .postMessage()
в IE9 был ненадежным, если я не использовал String
s.
Моим обходным путем было просто вызвать .postMessage(JSON.stringify({object: 'data'}))
и использовать JSON.parse()
в функции onMessage()
на другом конце.