2013-12-13 4 views
1

я использовать функцию PostMessage, чтобы отправить сообщение в IFRAME на моей странице, как этотaddEventListener не работает в Firefox и хром

$(document).ready(function(){ 
    document.getElementById('test').contentWindow.postMessage(message, '*'); 
)};//test is the id of my iframe in a.html 

и b.html, я использую window.addEventListener('message', onmessage, false); к приемнику это сообщение:

window.onload = function() { 
    var onmessage = function(e) { 
     document.getElementById('display').innerHTML = e.data; 
    }; 
    window.addEventListener('message', onmessage, false); 
}; //this is the javascript in b.html 

это хорошо работает в IE10, но я не могу получить любое сообщение в chrome и firefox! почему?

ответ

0

$(document).ready будет работать на DOMContentLoaded, что может произойти до того, подрамник загрузится. Таким образом, есть хорошая вероятность, что вы отправляете сообщение в родительском элементе, прежде чем добавить слушателя в дочерний элемент.

+0

Итак, что я должен делать, чтобы правильно отправлять сообщения в 'chrome' и' firefox'? И он может работать в IE10, не могли бы вы рассказать мне, почему? – derekxyz

+0

@derekxyz Используйте 'load()' вместо 'ready()'. –

+0

это причина. Я еще не знаю функцию 'load()'. – derekxyz

0

Проверьте обновление Chrome и FireFox, если браузер является последним.

ИЛИ

попробовать ....

alert(onmessage); 

если их любой выход сообщения.

+0

Да, мой браузер является последним. And alert (onmessage) '?' Onmessage' просто функция. – derekxyz

+0

if (window.XMLHttpRequest) {// код для IE7 +, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// код для IE6, IE5 xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP"); } – Marc

+0

скопируйте код, указанный выше. это проверяет браузер, чтобы он соответствовал вашему коду – Marc

0

Не помещайте свой код в window.onload, может быть, когда вы звоните PostMessage, IFrame OnLoad не срабатывает

var onmessage = function(e) { 
     console.log(e); 
    }; 
if (typeof window.addEventListener != 'undefined') { 
      window.addEventListener('message', onmessage, false); 
      } else if (typeof window.attachEvent != 'undefined') { 
      window.attachEvent('onmessage', onmessage); 
      } 
+0

Я попробовал, но ... он все равно ничего не может получить. И в 'IE10',' тип window.addEventListener' всегда является 'функцией'. – derekxyz

+0

этот случай 'onload' может работать в IE10. – derekxyz

+0

IE10 и IE11 поддерживают модель событий W3C, поэтому у них есть метод addEventListener. Вы размещаете html-файлы на http-сервере или просто открываете его с помощью браузера? – yoyo

Смежные вопросы