2013-12-13 74 views
1

工作我使用PostMessage函數將消息發送到一個IFRAME在我的網頁這樣的addEventListener沒有在Firefox和Chrome

$(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,但我不能在chromefirefox收到任何消息!爲什麼呢?

回答

0

$(document).ready將在DOMContentLoaded運行,完成了子幀之前加載它可以發生。因此,在向孩子添加偵聽器之前,您很可能會在父級發送消息。

+0

那麼,我應該怎麼做才能在'chrome'和'firefox'中正確發送消息?它可以在IE10中工作,你可以告訴我爲什麼? – derekxyz

+0

@derekxyz使用'load()'而不是'ready()'。 –

+0

這是原因,我不知道'load()'函數。 – derekxyz

0

如果瀏覽器是最新的,請檢查您的Chrome和FireFox更新。

OR

嘗試....

alert(onmessage); 

,如果他們的任何消息輸出。

+0

是的,我的瀏覽器是latest.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'類型總是一個'function'。 – derekxyz

+0

這個'onload'的情況下可以在IE10中工作。 – derekxyz

+0

IE10和IE11支持W3C事件模型,因此它們具有addEventListener方法。您可以將http文件放在http服務器中,或者只需通過broswer打開它? – yoyo

相關問題