iframe+postMessage解決跨域問題

postMessage 是 HTML5 新增加的一項功能,跨文檔消息傳輸(Cross Document Messaging),目前:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 都支持這項功能。
我們做個小demo演示下,a頁面里面用iframe嵌套了b頁面,b頁面像a頁面發(fā)送一些數(shù)據(jù),來從a頁面獲取相應(yīng)的數(shù)據(jù)。
1.首先新建a頁面:

<body>
<h1>a頁面</h1>
<div id="getBInfo"></div>
<br/>
<iframe id="iframe" src="http://192.168.1.235:9986" style="width:500px;"></iframe>
<script>
    window.onload = function () {
        var targetOrigin = 'http://192.168.1.235:9986';
        //想要操作當(dāng)前iframe的時候,就像該ifranme中postMessage()一個東西。
        window.frames[0].postMessage('', targetOrigin);
        //*表示任何域都可以監(jiān)聽。
 
        //當(dāng)監(jiān)聽到message事件的時候,就知道有人向a發(fā)送數(shù)據(jù)了
        window.addEventListener('message', function (e) {
            document.getElementById('getBInfo').innerHTML = '從b頁面?zhèn)鬟^來的信息:'+ JSON.stringify(e.data);
 
            // 假裝這是個接口
            setTimeout(function(){
                if (e.data && e.data.isgetlnglat) {
                    window.frames[0].postMessage({longitude:'120.146838',latitude:'30.291313'}, targetOrigin);
                }else{
                    window.frames[0].postMessage('哈哈,就不告訴你!', targetOrigin);
                }
            },1000)
 
        });
    }
</script>
</body>

2.再新建b頁面:

<body>
<h3>我是iframe里面的b頁面哦</h3>
<br/>
<button onclick="getInfo()">獲取經(jīng)緯度</button>
<br/>
<div id="getAInfo"></div>
<script>
 // var origin = 'http://192.168.1.235:9987'; 如果a.html初始沒有postMessage()的話,由于娶不到a頁面的地址,所以就要手動把地址加上;
    var origin = ''; 
    window.addEventListener('message', function (e) {
        if (e.source != window.parent) {
            return;
        }
        var data = e.data;
        if (data) document.getElementById('getAInfo').innerHTML = '從a頁面?zhèn)鬟^來的信息:' + JSON.stringify(data);
        origin = e.origin;
    })
 
    function getInfo() {
       // 像a頁面?zhèn)鲾?shù)據(jù)
        var option = {isgetlnglat: true};
        parent.postMessage(option, origin);
    }
</script>
</body>

下面是b頁面?zhèn)鱷isgetlnglat: true}效果圖:
17.gif

下面是b頁面?zhèn)鱷isgetlnglat:false}效果圖:
18.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容