
Window 對象
postMessage() 方法用于安全地實作跨源通信。
參數
說明
otherWindow
其他視窗的一個引用,比如 iframe 的 contentWindow 屬性、執行 window.open 傳回的視窗對象、或者是命名過或數值索引的 window.frames。
message
将要發送到其他 window的資料。
targetOrigin
指定哪些視窗能接收到消息事件,其值可以是 *(表示無限制)或者一個 URI。
transfer
可選,是一串和 message 同時傳遞的 Transferable 對象。這些對象的所有權将被轉移給消息的接收方,而發送一方将不再保有所有權。
Chrome 1
Edge 12
Firefox 8
Safari 4
Opera 9.5
<div>
<input id="text" type="text" value="Runoob" />
<button id="sendMessage" >發送消息</button>
</div>
<iframe loading="lazy" id="receiver" src="https://c.runoob.com/runoobtest/postMessage_receiver.html" width="300" height="360">
<p>你的浏覽器不支援 iframe。</p>
</iframe>
<script>
window.onload = function() {
var receiver = document.getElementById('receiver').contentWindow;
var btn = document.getElementById('sendMessage');
btn.addEventListener('click', function (e) {
e.preventDefault();
var val = document.getElementById('text').value;
receiver.postMessage("Hello "+val+"!", "https://c.runoob.com");
});
}
</script>
接收程式有一個事件監聽器,監聽 "message" 事件,同時我們要驗證消息來源位址,以確定是個可信的發送位址。
<div id="recMessage">
Hello World!
var messageEle = document.getElementById('recMessage');
window.addEventListener('message', function (e) { // 監聽 message 事件
alert(e.origin);
if (e.origin !== "https://www.runoob.com") { // 驗證消息來源位址
return;
messageEle.innerHTML = "從"+ e.origin +"收到消息: " + e.data;
e.source – 消息源,消息的發送視窗/iframe。
e.origin – 消息源的 URI(可能包含協定、域名和端口),用來驗證資料源。
e.data – 發送過來的資料。
