2016-11-07 101 views
0

我敢肯定這只是我的語法問題,但我試圖發送一個變量到iframe(用於colorbox)。目前我接受任何兩端的域名(只是爲了讓它工作)。下面是發送頁面的JS:使用postMessage()沒有收到

$(document).ready(function() { 
if(window.location.hash) { 
    var urlimage = window.location.hash.substring(1); 
    targetiframe = document.getElementById('wbgallery').contentWindow; 
    targetiframe.postMessage(urlimage, "*"); 
    console.log(urlimage); 
} 
}); 

這裏是接收頁:

$(document).ready(function() {  
window.addEventListener('message',receiveMessage); 
console.log(event); 
function receiveMessage(event) { 
    if (origin !== "*") 
    return; 
    inbound = event.data; 
    console.log(inbound); 
} 
}); 

我看到控制檯日誌urlimage,可以看到入站事件,但沒有。我使用Mozilla's explanation來嘗試和全​​力以赴。

+1

'receiveMessage'是使用從未設置變量'origin'。所以它返回。 – Barmar

+0

您還在'event'參數的函數外部有'console.log(event)'。那應該做什麼? – Barmar

+0

我想'origin'應該是'event.origin',但你爲什麼還要打擾呢?它永遠不可能是'*',它總是一個URL。 – Barmar

回答

0

您正在加載iframe中的頁面之前發送消息,因此message偵聽器尚未建立。

您可以讓iframe在準備就緒時向其發送消息,然後在此之後發送消息。

父代碼:

$(document).ready(function() { 
    if (window.location.hash) { 
    var urlimage = window.location.hash.substring(1); 
    var targetiframe = document.getElementById('wbgallery').contentWindow; 
    $(window).on("message", function(e) { 
     targetiframe.postMessage(urlimage, "*"); 
     console.log(urlimage); 
    }); 
    } 
}); 

的iframe代碼:

$(document).ready(function() { 
    $(window).on('message', function(event) { 
    inbound = event.data; 
    console.log(inbound); 
    }); 
    window.parent.postMessage("ready", "*"); 
}); 
+0

嗨,只是快速的問題。我得到了「Uncaught SyntaxError:missing)在參數列表後出現錯誤,並指出它在'receiveMessage(event)'的某個地方......我不明白,因爲根據jQuery的.on()文檔,它看起來都很好。有任何想法嗎? – Daniel

+0

對不起,這是一個編輯錯誤,它應該是'功能(事件)' – Barmar

+0

謝謝,現在工作。但是,你知道爲什麼event.data會返回'undefined'嗎?該發送頁面上的變量是正確的,但似乎沒有正確傳遞? – Daniel