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

主頁 > 知識庫 > HTML5中使用postMessage實現兩個網頁間傳遞數據

HTML5中使用postMessage實現兩個網頁間傳遞數據

熱門標簽:杭州營銷電銷機器人供應商 電話機器人如何 飛亞外呼系統 聯通400電話申請 貸款電銷人工和機器人哪個好 電視購物電銷外呼系統 西寧智能外呼系統加盟 高德地圖標注賓館位置 百應電銷機器人產業

估計很少人知道HTML5 APIS里有一個window.postMessage API。window.postMessage的功能是允許程序員跨域在兩個窗口/frames間發送數據信息。基本上,它就像是跨域的AJAX,但不是瀏覽器跟服務器之間交互,而是在兩個客戶端之間通信。讓我們來看一下window.postMessage是如何工作的。除了IE6、IE7之外的所有瀏覽器都支持這個功能。

數據發送端

首先我們要做的是創建通信發起端,也就是數據源”source”。作為發起端,我們可以open一個新窗口,或創建一個iframe,往新窗口里發送數據,簡單起見,我們每6秒鐘發送一次,然后創建消息監聽器,從目標窗口監聽它反饋的信息。

JavaScript Code復制內容到剪貼板
  1. //彈出一個新窗口   
  2. var domain = 'http://scriptandstyle.com';   
  3. var myPopup = window.open(domain    
  4.             + '/windowPostMessageListener.html','myWindow');   
  5.   
  6. //周期性的發送消息   
  7. setInterval(function(){   
  8.  var message = 'Hello!  The time is: ' + (new Date().getTime());   
  9.  console.log('blog.local:  sending message:  ' + message);   
  10.         //send the message and target URI   
  11.  myPopup.postMessage(message,domain);   
  12. },6000);   
  13.   
  14. //監聽消息反饋   
  15. window.addEventListener('message',function(event) {   
  16.  if(event.origin !== 'http://scriptandstyle.com'return;   
  17.  console.log('received response:  ',event.data);   
  18. },false);   
  19.   

這里我使用了window.addEventListener,但在IE里這樣是不行的,因為IE使用window.attachEvent。如果你不想判斷瀏覽器的類型,可以使用一些工具庫,比如jQuery或Dojo。

假設你的窗口正常的彈出來了,我們發送一條消息——需要指定URI(必要的話需要指定協議、主機、端口號等),消息接收方必須在這個指定的URI上。如果目標窗口被替換了,消息將不會發出。

我們同時創建了一個事件監聽器來接收反饋信息。有一點極其重要,你一定要驗證消息的來源的URI!只有在目標方合法的情況才你才能處理它發來的消息。

如果是使用iframe,代碼應該這樣寫:

JavaScript Code復制內容到剪貼板
  1. //捕獲iframe   
  2. var domain = 'http://scriptandstyle.com';   
  3. var iframe = document.getElementById('myIFrame').contentWindow;   
  4.   
  5. //發送消息   
  6. setInterval(function(){   
  7.  var message = 'Hello!  The time is: ' + (new Date().getTime());   
  8.  console.log('blog.local:  sending message:  ' + message);   
  9.         //send the message and target URI   
  10.  iframe.postMessage(message,domain);    
  11. },6000);   
  12.   

確保你使用的是iframe的contentWindow屬性,而不是節點對象。

數據接收端

下面我們要開發的是數據接收端的頁面。接收方窗口里有一個事件監聽器,監聽“message”事件,一樣,你也需要驗證消息來源方的地址。消息可以來自任何地址,要確保處理的消息是來自一個可信的地址。

JavaScript Code復制內容到剪貼板
  1. //響應事件   
  2. window.addEventListener('message',function(event) {   
  3.  if(event.origin !== 'http://davidwalsh.name'return;   
  4.  console.log('message received:  ' + event.data,event);   
  5.  event.source.postMessage('holla back youngin!',event.origin);   
  6. },false);   
  7.   

上面的代碼片段是往消息源反饋信息,確認消息已經收到。下面是幾個比較重要的事件屬性:

source – 消息源,消息的發送窗口/iframe。
origin – 消息源的URI(可能包含協議、域名和端口),用來驗證數據源。
data – 發送方發送給接收方的數據。

這三個屬性是消息傳輸中必須用到的數據。

使用window.postMessage

跟其他很web技術一樣,如果你不校驗數據源的合法性,那使用這種技術將會變得很危險;你的應用的安全需要你對它負責。window.postMessage就像是PHP相對于JavaScript技術。window.postMessage很酷,不是嗎?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:煙臺 撫州 內蒙古 玉溪 牡丹江 晉中 安慶 邯鄲

巨人網絡通訊聲明:本文標題《HTML5中使用postMessage實現兩個網頁間傳遞數據》,本文關鍵詞  HTML5,中,使用,postMessage,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5中使用postMessage實現兩個網頁間傳遞數據》相關的同類信息!
  • 本頁收集關于HTML5中使用postMessage實現兩個網頁間傳遞數據的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 自治县| 同江市| 盘山县| 横山县| 清远市| 兴安盟| 营山县| 洞口县| 广南县| 蒲城县| 镇宁| 永仁县| 乐都县| 武山县| 霍林郭勒市| 洛阳市| 驻马店市| 循化| 庆城县| 丁青县| 巴彦淖尔市| 丹江口市| 辉南县| 资溪县| 金川县| 玛沁县| 弋阳县| 吐鲁番市| 静安区| 青海省| 固原市| 元谋县| 东明县| 苗栗市| 大理市| 万荣县| 绥棱县| 四川省| 潼关县| 思南县| 铁力市|