0

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

ответ

1

вам не хватает «на»

window.attachEvent("onmessage", receiveMessage); 
+0

Да игнорировать мой предыдущий комментарий, я забыл добавить его в на обеих страницах: теперь это работает :) Однако теперь я получаю другую ошибку, поэтому я буду исправлять это. Спасибо за вашу помощь, я приму ваш ответ, поскольку он исправил мою оригинальную проблему. –