摘要:今天填了一個利用嵌套頁面傳遞消息的坑。原傳遞消息舉例頁面頁面以上頁面為父頁面,為中新增的方法,可以實現跨文檔消息傳輸。返回窗口中所框架或。消息傳遞給頁面后,接收信息用觸發事件就可以接收接收的信息,具體信息在里面。
今天填了一個h5利用iframe嵌套頁面傳遞消息的坑。
原iframe傳遞消息舉例
js1.html頁面:
js2.html頁面:
以上js1頁面為父頁面,postMessage為HTML5中新增的postMessage方法,postMessage可以實現跨文檔消息傳輸。
window.frames 返回窗口中所框架或
不過!
坑來了。
嵌入的頁面不止一個iframe!頁面里添加了360和QQ的插件,兩個插件在頁面里動態添加了N個iframe,造成了js沖突,js2頁面沒有收到消息。
例如:
js1.html頁面:
js2.html頁面:
以上,js4、js5、js6頁面好比如為其他插件加載的iframe,我的js2一下就被頂的不知道加載到第幾位去了,笨方法可以frames.length看看有幾個框架,然后window.frames[N]一個個試,不過缺點是不穩定,兼容性太差了。那么上網查一下window.frames[N]其實是可以指定選擇框架的。
給自己的iframe加一個ID,window.frames[ID]就能指定加載js2的iframe。
但是!!非IE內核下window.frames["child"].postMessage(“XXXX”),失敗了!!!提示postMessage未定義!!!what f**k,什么鬼,這么皮。
打印一下 window.frames["child"]就會發現,返回的是dom對象。。所以不會有postMessage方法,更改之后改為window.frames["child"].contentWindow,用contentWindow把iframe的信息專換成window對象,這樣以后加載多少iframe都不怕了。
最終改進版即為:
js1.html頁面:
js2.html頁面:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107310.html
摘要:跨域訪問的處理辦法及適用條件適用條件請求的接口需要支持訪問這里需要強調的是,不屬于的部分,它只是把放入標簽中實現的數據傳輸,不受同源策略限制。 為什么會有跨域問題 我們試想一下以下幾種情況: 我們打開了一個天貓并且登錄了自己的賬號,這時我們再打開一個天貓的商品,我們不需要再進行一次登錄就可以直接購買商品,因為這兩個網頁是同源的,可以共享登錄相關的 cookie 或 localStor...
閱讀 1294·2021-10-08 10:05
閱讀 4106·2021-09-22 15:54
閱讀 3105·2021-08-27 16:18
閱讀 3106·2019-08-30 15:55
閱讀 1435·2019-08-29 12:54
閱讀 2748·2019-08-26 11:42
閱讀 543·2019-08-26 11:39
閱讀 2128·2019-08-26 10:11