Window postMessage() 方法
定义和用法
postMessage() 方法用于安全地实现跨源通信。
语法
otherWindow.postMessage(message, targetOrigin, [transfer]);
参数 | 说明 |
---|
otherWindow | 其他窗口的一个引用,比如 iframe 的 contentWindow 属性、执行 window.open 返回的窗口对象、或者是命名过或数值索引的 window.frames。 | message | 将要发送到其他 window的数据。 | targetOrigin | 指定哪些窗口能接收到消息事件,其值可以是?*(表示无限制)或者一个 URI。 | transfer | 可选,是一串和 message 同时传递的 Transferable 对象。这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。 |
index.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>父页面</title>
</head>
<body>
<h1>这是父页面</h1>
<div>
<textarea id="text" value="消息内容"></textarea><br>
<button id="sendMessage">发送消息</button>
</div>
<br><br>
<h3>这是被嵌套的页面</h3>
<iframe id="receiver" src="iframe.html" width="300" height="200">
<p>你的浏览器不支持 iframe。</p>
</iframe>
<script>
var btn = document.querySelector("#sendMessage");
var input = document.querySelector("#text");
btn.addEventListener("click", function (e) {
document.querySelector("#receiver").contentWindow.postMessage(input.value, "http://localhost:8888");//传信息给iframe页面
});
function getIframeMessage(msg) {
input.value = "获取到了子页面的信息:" + msg;
}
</script>
</body>
</html>
iframe.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>被嵌套页面</title>
</head>
<body>
<div id="recMessage">
</div>
<br><br>
<div>
<input id="text" type="text" value="传递给父页面的消息内容"/>
<button id="sendMessage">发送消息</button>
</div>
<script>
var messageEle = document.getElementById("recMessage");
//监听父页面传递的信息----------------------------------------
window.addEventListener("message", function (e) {
/*
e.source – 消息源,消息的发送窗口/iframe。
e.origin – 消息源的 URI(可能包含协议、域名和端口),用来验证数据源。
e.data – 发送过来的数据。
*/
if (e.origin !== "http://localhost:8888") return alert("未知来源地址:" + e.origin); // 验证消息来源地址
messageEle.innerHTML = "从" + e.origin + "<br>收到消息: " + e.data;
});
//传递信息给父页面----------------------------------------
var btn = document.getElementById("sendMessage");
btn.addEventListener("click", function (e) {
var val = document.getElementById("text").value;
window.parent.getIframeMessage(val);
});
</script>
</body>
</html>
父页面传信息给子页面?
子页面传信息给父页面?
|