Я работаю над проектом, где нам нужно использовать как postMessage()
, так и addEventListener()
, но мы хотим сделать приложение совместимым с основными браузерами. Поскольку все еще есть люди (да, они существуют, и да, они должны быть сожжены) с использованием Internet Explorer 8, мы должны сделать эти два метода совместимыми.Создание postMessage() и addEventListener(), совместимое с IE8
Я написал код ниже, который позаботился о том, чтобы сделать addEventListener()
совместимым, используя attachEvent()
вместо этого, как предложено в this answer. Однако postMessage()
все еще не работает, поэтому я добавил его в таймаут, как это было предложено на this website. Это не работает, и я действительно борюсь за совместимость приложения. Он не вызывает никаких ошибок, и я также вижу, что мое приложение отправляет сообщение в источник iframe, однако сообщение никогда не обрабатывается.
<script type="text/javascript">
function ready()
{
window.setTimeout(function() {
document.getElementById("editor").contentWindow.postMessage("A", "domain here");
}, 0);
}
function receiveMessage(event)
{
if (event.origin !== "domain here")
return;
}
window.setTimeout(function() {
if (window.addEventListener) {
window.addEventListener("message", receiveMessage, false);
}
else {
window.attachEvent("message", receiveMessage);
}
}, 0);
</script>
У меня есть аналогичный сценарий на моей второй странице (которая загружаемый в IFRAME), который принимает сообщение и отправляет сообщение обратно. Оба сообщения отправляются и принимаются всеми основными браузерами, поэтому возникает вопрос: как я могу сделать над сценарием совместимым с Internet Explorer 8?
Еще раз: я согласен с тем, что мы не должны заботиться о людях, использующих Internet Explorer 8, и должны сжечь их, пока они все еще используют его: однако это означало бы, что мы должны сжечь наших клиентов, чего мы не сможем сделать. Так что да, мне действительно нужно сделать его совместимым.
В случае, если вы задаетесь вопросом: getElementById("editor")
заражается IFrame определяются следующим образом:
<iframe src="frameListener.html" class="editor" id="editor" onload="ready()"></iframe>
Да игнорировать мой предыдущий комментарий, я забыл добавить его в на обеих страницах: теперь это работает :) Однако теперь я получаю другую ошибку, поэтому я буду исправлять это. Спасибо за вашу помощь, я приму ваш ответ, поскольку он исправил мою оригинальную проблему. –