婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Html5 postMessage實(shí)現(xiàn)跨域消息傳遞

Html5 postMessage實(shí)現(xiàn)跨域消息傳遞

熱門(mén)標(biāo)簽:農(nóng)村住宅地圖標(biāo)注 鶴壁手機(jī)自動(dòng)外呼系統(tǒng)怎么安裝 ai電銷機(jī)器人連接網(wǎng)關(guān) 中紳電銷智能機(jī)器人 鄭州電銷外呼系統(tǒng)違法嗎 漳州人工外呼系統(tǒng)排名 濟(jì)南辦理400電話 威海營(yíng)銷外呼系統(tǒng)招商 跟電銷機(jī)器人做同事

一、同源策略

    要理解跨域,我們首先要知道什么是同源策略。百度百科上這樣定義同源策略:同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會(huì)受到影響。可以說(shuō)Web是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。

    何謂同源:如果兩個(gè)URL的域名、協(xié)議、端口相同,則表示他們同源。

    瀏覽器的同源策略,限制了來(lái)自不同源的"document"或腳本,對(duì)當(dāng)前"document"讀取或設(shè)置某些屬性。 (白帽子講web安全[1])。根據(jù)這個(gè)策略,a.com域名下的JavaScript無(wú)法跨域操作b.com域名下的對(duì)象。比如,baidu.com域名下的頁(yè)面中包含的JavaScript代碼,不能訪問(wèn)google.com域名下的頁(yè)面內(nèi)容。

    JavaScript必須嚴(yán)格遵循瀏覽器的同源策略,包括Ajax(事實(shí)上,Ajax也是由JavaScript組成)。通過(guò)XMLHttpRequest對(duì)象實(shí)現(xiàn)的Ajax請(qǐng)求,不能向不同的域提交,比如,在abc.test.com下的頁(yè)面,不能向def.test.com提交Ajax請(qǐng)求。運(yùn)用了同源策略之后,用戶就能確保自己正在查看的頁(yè)面確實(shí)來(lái)自于正在瀏覽的域。

    同源策略在現(xiàn)實(shí)應(yīng)用中是十分重要的。假設(shè)攻擊者利用Iframe把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)用戶使用真實(shí)的用戶名、密碼登錄時(shí),該頁(yè)面就可以通過(guò)JavaScript讀取到用戶表單中的內(nèi)容,這樣用戶名和密碼信息就被泄漏了。

    在瀏覽器中,<script>、<link>、<img>、<iframe>等標(biāo)簽都可以加載跨域資源,不受同源策略限制,但是通過(guò)src加載的資源,瀏覽器限制了javascript的權(quán)限,不能進(jìn)行各種的讀寫(xiě)。從而,即使請(qǐng)求發(fā)了,敏感數(shù)據(jù)回來(lái)了,也是取不到的。

二、postMessage實(shí)現(xiàn)跨域

   語(yǔ)法:window.postMessage(msg,targetOrigin)

    window: 指目標(biāo)窗口,可能是window.frames屬性的成員或者由window.open方法創(chuàng)建的窗口

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

    targetOrigin:“目標(biāo)域“,包括:協(xié)議、主機(jī)名、端口號(hào)。若指定為”*“,則表示可以傳遞給任意窗口,指定為”/“,則表示和當(dāng)前窗口的同源窗口。

    獲取postMessage傳來(lái)的消息:為頁(yè)面添加onmessage事件

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. window.addEventListener('message',function(e) {   
  2.        
  3. }  

    onmessage事件接受一個(gè)參數(shù)e,它是一個(gè)event對(duì)象。

    e的幾個(gè)重要屬性:

      1、data:postMessage傳遞過(guò)來(lái)的msg

      2、發(fā)送消息的窗口對(duì)象

      3、origin:發(fā)送消息窗口的源(協(xié)議+主機(jī)+端口號(hào))

     來(lái)寫(xiě)一個(gè)簡(jiǎn)單的demo:

     http://source.com/source.html用來(lái)發(fā)送數(shù)據(jù):

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <iframe id="iframe" src="http://target.com/target.html"></iframe>  
  2. <input id="msg" type="text" placeholder="請(qǐng)輸入要發(fā)送的消息">  
  3. <button id="send">發(fā)送</button>  
  4.   
JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. window.onload =function() {   
  2.     document.getElementById('send').onclick = function() {   
  3.     var msg = document.getElementById('msg').value;   
  4.     var iframeWindow = document.getElementById('iframe').contentWindow;   
  5.     iframeWindow.postMessage(msg,"http://target.com/target.html");   
  6.     }   
  7. }   

     http://target.com/target.html用來(lái)接收數(shù)據(jù): 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <div>  
  2.    <h2>target.html,以下是接收到的消息:</h2>  
  3.     <section id="msg">  
  4.            
  5.     </section>  
  6. </div>  
JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. window.onload = function() {   
  2.   
  3.     if(window.addEventListener){   
  4.         window.addEventListener("message", handleMessage, false);   
  5.     }   
  6.     else{   
  7.         window.attachEvent("onmessage", handleMessage);   
  8.     }     
  9.   
  10.     function handleMessage(event) {   
  11.         event = event || window.event;   
  12.   
  13.         if(event.origin === 'http://source.com') {   
  14.             document.getElementById('msg').innerHTML = event.data;   
  15.         }   
  16.     }   
  17. }   
  18.   

    運(yùn)行結(jié)果如下:

 

   點(diǎn)擊發(fā)送按鈕的時(shí)候,target.html將會(huì)受到發(fā)送的消息。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

原文:http://www.cnblogs.com/MarcoHan/p/5245519.html

標(biāo)簽:惠州 咸陽(yáng) 文山 甘南 蘇州 紅河 萍鄉(xiāng) 營(yíng)口

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Html5 postMessage實(shí)現(xiàn)跨域消息傳遞》,本文關(guān)鍵詞  Html5,postMessage,實(shí)現(xiàn),跨域,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Html5 postMessage實(shí)現(xiàn)跨域消息傳遞》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Html5 postMessage實(shí)現(xiàn)跨域消息傳遞的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 济阳县| 阿克陶县| 道孚县| 天全县| 合作市| 廊坊市| 雅江县| 穆棱市| 湖南省| 百色市| 长治县| 满城县| 广丰县| 清水河县| 北宁市| 马龙县| 志丹县| 平和县| 青铜峡市| 江山市| 连南| 建阳市| 天镇县| 霍山县| 噶尔县| 涞水县| 彰化县| 商水县| 尉氏县| 抚州市| 蒙山县| 梧州市| 宁晋县| 离岛区| 荔浦县| 聂荣县| 灵石县| 伊通| 呈贡县| 特克斯县| 万源市|