html5 postMessage解決跨域赊颠、跨窗口消息傳遞

問(wèn)題:

做前端開發(fā)所遇到的一些消息傳遞圾结,除了前端和后端消息傳遞之外瑰剃,還有幾個(gè)經(jīng)常遇到的問(wèn)題。

  • 頁(yè)面和其打開的新窗口的消息傳遞
  • 多窗口之間的消息傳遞
  • 頁(yè)面與嵌套的iframe消息傳遞
  • 以上三個(gè)問(wèn)題均是跨域數(shù)據(jù)傳遞

解決跨域辦法:

  • document.domain+iframe的設(shè)置筝野,應(yīng)用于主域相同而子域不同
  • 利用iframe和location.hash晌姚,數(shù)據(jù)直接暴露在了url中粤剧,數(shù)據(jù)容量和類型都有限
  • window.name 保存數(shù)據(jù)以及跨域 iframe 靜態(tài)代理動(dòng)態(tài)傳輸方案,充分的運(yùn)用了window.name因?yàn)轫?yè)面的url改變而name不改變的特性挥唠。

html5中最炫酷的API之一:

就是 跨文檔消息傳輸Cross Document Messaging抵恋。高級(jí)瀏覽器Internet Explorer 8+, chrome,F(xiàn)irefox , Opera 和 Safari 都將支持這個(gè)功能宝磨。這個(gè)功能實(shí)現(xiàn)也非常簡(jiǎn)單主要包括接受信息的”message”事件和發(fā)送消息的”postMessage”方法弧关。

postMessage()

這些問(wèn)題都有一些解決辦法,但html5引入的message的API可以更方便唤锉、有效世囊、安全的解決這些難題。postMessage()方法允許來(lái)自不同源的腳本采用異步方式進(jìn)行有限的通信窿祥,可以實(shí)現(xiàn)跨文本檔株憾、多窗口、跨域消息傳遞晒衩。

postMessage(data,origin)方法接受兩個(gè)參數(shù)

1.data:要傳遞的數(shù)據(jù)嗤瞎,html5規(guī)范中提到該參數(shù)可以是JavaScript的任意基本類型或可復(fù)制的對(duì)象,然而并不是所有瀏覽器都做到了這點(diǎn)兒听系,部分瀏覽器只能處理字符串參數(shù)猫胁,所以我們?cè)趥鬟f參數(shù)的時(shí)候需要使用JSON.stringify()方法對(duì)對(duì)象參數(shù)序列化,在低版本IE中引用json2.js可以實(shí)現(xiàn)類似效果跛锌。

2.origin:字符串參數(shù),指明目標(biāo)窗口的源届惋,協(xié)議+主機(jī)+端口號(hào)[+URL]髓帽,URL會(huì)被忽略,所以可以不寫脑豹,這個(gè)參數(shù)是為了安全考慮郑藏,postMessage()方法只會(huì)將message傳遞給指定窗口,當(dāng)然如果愿意也可以建參數(shù)設(shè)置為"*"瘩欺,這樣可以傳遞給任意窗口必盖,如果要指定和當(dāng)前窗口同源的話設(shè)置為"/"。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俱饿,一起剝皮案震驚了整個(gè)濱河市歌粥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拍埠,老刑警劉巖失驶,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異枣购,居然都是意外死亡嬉探,警方通過(guò)查閱死者的電腦和手機(jī)擦耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涩堤,“玉大人眷蜓,你說(shuō)我怎么就攤上這事√ノВ” “怎么了吁系?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)痊远。 經(jīng)常有香客問(wèn)我垮抗,道長(zhǎng),這世上最難降的妖魔是什么碧聪? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任冒版,我火速辦了婚禮,結(jié)果婚禮上逞姿,老公的妹妹穿的比我還像新娘辞嗡。我一直安慰自己,他們只是感情好滞造,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布续室。 她就那樣靜靜地躺著,像睡著了一般谒养。 火紅的嫁衣襯著肌膚如雪挺狰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天买窟,我揣著相機(jī)與錄音丰泊,去河邊找鬼。 笑死始绍,一個(gè)胖子當(dāng)著我的面吹牛瞳购,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亏推,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼学赛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吞杭?” 一聲冷哼從身側(cè)響起盏浇,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芽狗,沒(méi)想到半個(gè)月后缠捌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年曼月,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谊却。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哑芹,死狀恐怖炎辨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聪姿,我是刑警寧澤碴萧,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站末购,受9級(jí)特大地震影響破喻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盟榴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一曹质、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧擎场,春花似錦羽德、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至站欺,卻和暖如春姨夹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矾策。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工匀伏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝴韭。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像熙侍,于是被迫代替她去往敵國(guó)和親榄鉴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容