postMessage的兩種使用方式
一、使用postMessage在irfame中實(shí)現(xiàn)跨域數(shù)據(jù)傳遞
1、父頁面內(nèi)容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>主頁面</h1>
<iframe id="child" src="http://10.0.0.159:8080"></iframe>
<div>
<h2>主頁面跨域接收消息區(qū)域</h2>
<div id="message"></div>
</div>
</body>
<script>
/* -------------iframe跨域數(shù)據(jù)傳遞--------------- */
//傳遞數(shù)據(jù)到子頁面
window.onload = function() {
document.getElementById('child').contentWindow.postMessage("主頁面消息", "http://10.0.0.159:8080")
}
//接受子頁面?zhèn)鬟f過來的數(shù)據(jù)
window.addEventListener('message', function(event) {
document.getElementById('message').innerHTML = "收到" + event.origin + "消息:" + event.data;
}, false);
</script>
</html>2、子頁面
(我這里在在vue頁面里做的測試,vue模板的html代碼就不展示了)
mounted() {
//接收父頁面?zhèn)鬟^來的數(shù)據(jù)
window.addEventListener('message', function(event) {
// 處理addEventListener執(zhí)行兩次的情況,避免獲取不到data
// 因此判斷接收的域是否是父頁面
if(event.origin.includes("http://127.0.0.1:8848")){
console.log(event);
document.getElementById('message').innerHTML = "收到" + event.origin + "消息:" + event.data;
//把數(shù)據(jù)傳遞給父頁面 > top.postMessage(要傳遞的數(shù)據(jù),父頁面的url訪問地址)
top.postMessage("子頁面消息收到", 'http://127.0.0.1:8848/boatStaticHtml/iframe%E9%80%9A%E4%BF%A1.html');
}
}, false);
}3、效果圖展示

二、postMessage在window.open()中的使用
1、第一種方式,兩個(gè)頁面之前數(shù)據(jù)的相互傳遞
父頁面:parent.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="js/jquery-3.1.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
function openWin() {
var params = new Array();
params[0] = new Array("params1", "aaaaaa");
params[1] = new Array("params2", "bbbbbb");
var popupwin = window.open("child.html");
//onload只能執(zhí)行一次,也就是如果子窗口有onload事件,可能會(huì)覆蓋。
popupwin.onload = function(e){
popupwin.postMessage(params, "http://127.0.0.1:8848/");
}
popupwin.onunload = function(e){
var val = popupwin.returnValue;
alert(val);
}
}
</script>
</head>
<body>
<input type="button" value="打開新頁面" onclick="openWin()" />
</body>
</html>子頁面:child.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>popup window</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script language="javascript" type="text/javascript">
function closeWin() {
window.returnValue = true;
window.close();
}
document.onreadystatechange = function(e)
{
if (document.readyState === 'complete')
{
window.addEventListener('message', function(e){
var params = e.data;
$('#params1').text(params[0][1]);
$('#params2').text(params[1][1]);
});
}
};
</script>
</head>
<body>
<h3>Parameter params1: <b id="params1"></b></h3>
<h3>Parameter params2: <b id="params2"></b></h3>
<div><input type="button" value="Return Value" onclick="closeWin()" /></div>
</body>
</html>效果如下:


2、第二種方式:
//-----父頁面------
//打開新頁面
window.open();
//監(jiān)聽新頁面?zhèn)鬟f過來的數(shù)據(jù)
window.addEventListener('message', function(event) {
console.log(event.data);
}, false);
//子頁面數(shù)據(jù)傳遞方式,這個(gè)方式需要通過事件來傳遞
setTimeout(function(){
window.opener.postMessage({ isColse: 'ok' }, '*');
},2000)到此這篇postMessage的兩種使用方式的文章就介紹到這了,更多相關(guān)postMessage iframe跨域通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解JavaScript系列(16) 閉包(Closures)
本章我們將介紹在JavaScript里大家經(jīng)常來討論的話題 —— 閉包(closure)。閉包其實(shí)大家都已經(jīng)談爛了。盡管如此,這里還是要試著從理論角度來討論下閉包,看看ECMAScript中的閉包內(nèi)部究竟是如何工作的2012-04-04
JS不同運(yùn)算符下隱式類型轉(zhuǎn)換的實(shí)現(xiàn)示例
隱式轉(zhuǎn)換就是自動(dòng)轉(zhuǎn)換,通常發(fā)生在一些數(shù)學(xué)運(yùn)算中,本文就來介紹一下JS不同運(yùn)算符下隱式類型轉(zhuǎn)換的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
webpack學(xué)習(xí)--webpack經(jīng)典7分鐘入門教程
這篇文章主要介紹了webpack學(xué)習(xí)--webpack經(jīng)典7分鐘入門教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
JavaScript對(duì)URL進(jìn)行編碼和解碼的三種方式
本文詳細(xì)介紹了為何在URL中需要編碼,列舉了需要編碼的字符,以及JavaScript中的escape,encodeURI,encodeURIComponent三種編碼方式及其用途和注意事項(xiàng),需要的朋友可以參考下2025-04-04
JS實(shí)現(xiàn)隨頁面滾動(dòng)顯示/隱藏窗口固定位置元素
窗口固定位置顯示元素,當(dāng)頁面高度大于某高度,并且頁面向下滾動(dòng)時(shí),顯示該元素;當(dāng)頁面位置小于某高度,或者頁面向上滾動(dòng)時(shí),隱藏該元素,下面通過本文給大家介紹JS實(shí)現(xiàn)隨頁面滾動(dòng)顯示/隱藏窗口固定位置元素,需要的朋友參考下吧2016-02-02
web性能優(yōu)化之javascript性能調(diào)優(yōu)
本文詳細(xì)介紹Web 開發(fā)中關(guān)于性能方面需要注意的一些小細(xì)節(jié),從 JavaScript 本身著手,介紹了 JavaScript 中需要避免的一些函數(shù)的使用和編程規(guī)則,比如 eval 的弊端,function scope chain 以及 String 的用法等等2012-12-12
微信小程序搜索框樣式并實(shí)現(xiàn)跳轉(zhuǎn)到搜索頁面(小程序搜索功能)
這篇文章主要介紹了微信小程序搜索框樣式并實(shí)現(xiàn)跳轉(zhuǎn)到搜索頁面(小程序搜索功能),需要的朋友可以參考下2020-03-03

