日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

使用window.postMessage实现跨域通信

發(fā)布時(shí)間:2023/12/9 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用window.postMessage实现跨域通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaScript由于同源策略的限制,跨域通信一直是棘手的問題。當(dāng)然解決方案也有很多:

  • document.domain+iframe的設(shè)置,應(yīng)用于主域相同而子域不同;
  • 利用iframe和location.hash,數(shù)據(jù)直接暴露在了url中,數(shù)據(jù)容量和類型都有限
  • Flash LocalConnection, 對(duì)象可在一個(gè) SWF 文件中或多個(gè) SWF 文件間進(jìn)行通信, 只要在同一客戶端就行,跨應(yīng)用程序, 可以跨域。
  • window.name 保存數(shù)據(jù)以及跨域 iframe 靜態(tài)代理動(dòng)態(tài)傳輸方案,充分的運(yùn)用了window.name因?yàn)轫撁娴膗rl改變而name不改變的特性。

各種方案網(wǎng)上都有很多實(shí)例代碼,大家可以自己搜索一下。
html5中最炫酷的API之一:就是?跨文檔消息傳輸Cross Document Messaging。高級(jí)瀏覽器Internet Explorer 8+, chrome,Firefox , Opera ?和 Safari?都將支持這個(gè)功能。這個(gè)功能實(shí)現(xiàn)也非常簡單主要包括接受信息的”message”事件和發(fā)送消息的”postMessage”方法。

發(fā)送消息的”postMessage”方法

向外界窗口發(fā)送消息:

otherWindow.postMessage(message, targetOrigin);otherWindow:?指目標(biāo)窗口,也就是給哪個(gè)window發(fā)消息,是 window.frames 屬性的成員或者由 window.open 方法創(chuàng)建的窗口

參數(shù)說明:

  • message:?是要發(fā)送的消息,類型為 String、Object (IE8、9 不支持)
  • targetOrigin:?是限定消息接收范圍,不限制請(qǐng)使用 ‘*’

接受信息的”message”事件

var onmessage = function (event) {var data = event.data;var origin = event.origin;//do someing};if (typeof window.addEventListener != 'undefined') {window.addEventListener('message', onmessage, false);} else if (typeof window.attachEvent != 'undefined') {//for iewindow.attachEvent('onmessage', onmessage);}回調(diào)函數(shù)第一個(gè)參數(shù)接收 Event 對(duì)象,有三個(gè)常用屬性:
  • data:?消息
  • origin:?消息來源地址
  • source:?源 DOMWindow 對(duì)象

看一個(gè)簡單的來自網(wǎng)上的demo:http://www.css88.com/demo/postmessage/

當(dāng)然postmessage也有一些不足的地方:
  • ie8,ie9下傳遞的數(shù)據(jù)類型值支持字符串類型,不過可以使用用JSON對(duì)象和字符串之間的相互轉(zhuǎn)換來解決這個(gè)問題;
  • ie6,ie7需要寫兼容方案,個(gè)人認(rèn)為window.name比較靠譜;

參考網(wǎng)址:
http://js8.in/752.html
http://www.36ria.com/3890
http://www.planeart.cn/?post_type=post&p=1620

聲明: 本文采用 BY-NC-SA 協(xié)議進(jìn)行授權(quán) | WEB前端開發(fā)
轉(zhuǎn)載請(qǐng)注明轉(zhuǎn)自《使用window.postMessage實(shí)現(xiàn)跨域通信》

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的使用window.postMessage实现跨域通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。