摘要:四傳遞信息給父頁面參考跨域子頁面傳給父頁面父頁面代碼崔渙測試父頁面參數中有屬性,就是父窗口發送過來的數據把父窗口發送過來的數據顯示在子窗口中。五簡單分析和安全問題傳送過來的信息如下圖,幾乎包含了所有應該有的信息。
一:傳統的解決方式。背景:由于同源策略存在,javascript的跨域一直都是一個棘手的問題。父頁面無法直接獲取iframe內部的跨域資源;同時,iframe內部的跨域資源也無法將信息直接傳遞給父頁面。
傳統的iframe資源解決方式:主要通過通過中間頁面代理,此處不再贅述,參考中間頁獲取跨域iframe
二:html5 postMessage的產生隨著HTML5的發展,html5工作組提供了兩個重要的接口:postMessage(send) 和 onmessage。這兩個接口有點類似于websocket,可以實現兩個跨域站點頁面之間的數據傳遞。
postMessage API
下面是實踐過程中兩個小栗子:分別父頁面傳遞信息給iframe,iframe傳遞信息給父頁面。
三:iframe獲取父頁面信息話不多說,直接上碼:
參考demo:父頁面傳給子頁面demo
子頁面代碼崔渙 iframe postmessage 父頁面
崔渙測試子頁面信息 this is the 8003 port for cuixiaozhuai
demo 效果如下圖:兩個跨域頁面之間,父頁面給子頁面傳遞數據。
參考demo:跨域子頁面傳給父頁面demo
父頁面代碼子頁面代碼崔渙測試父頁面
this is the 1015 port for cuixiaozhuai。
崔小渙iframe postmessage 測試頁面
this is the port for cuixiaozhuai
demo 效果如下圖:兩個跨域頁面之間,子頁面傳遞數據給父頁面傳遞數據。
postmessage 傳送過來的信息如下圖,
幾乎包含了所有應該有的信息。甚至data中可以包含object,出于安全考慮可以域的校驗,數據規則的校驗安全校驗,如下代碼
window.addEventListener("message", function (event) { //校驗函數是否合法 var checkMessage = function () { // 只獲取需要的域,并非所有都可以跨域 if (event.origin != "need domain") { return false; } var message = event.data; // 傳輸數據類型校驗 if (typeof(message) !== "object") { return false; } // message 的rule中包含xxx則為xxx需要字段。 return message.rule === "xxx"; }; if (checkMessage()) { // 通過校驗進行相關操作 addDetailFunc(event); } });
【轉載請注明:postMessage處理iframe 跨域問題 | 靠譜崔小拽 】
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78770.html
閱讀 3638·2021-11-25 09:43
閱讀 636·2021-09-22 15:59
閱讀 1742·2021-09-06 15:00
閱讀 1769·2021-09-02 09:54
閱讀 689·2019-08-30 15:56
閱讀 1175·2019-08-29 17:14
閱讀 1838·2019-08-29 13:15
閱讀 879·2019-08-28 18:28