postMessage實現跨域消息傳遞


不同域名下的文檔因為安全問題,不允許相互之間文檔的訪問,但是有的時候卻不得不需要這樣的操作。因此我們一般可以采用window.name,hash,或者jsonp來實現跨域訪問。

不過自從html5出來以后,我們又可以多一種實現方式了postMessage,下面就是一個最簡單的消息傳遞的例子,我們要實現的功能是將page1頁面中的內容,發送到不同域名下的page2頁面,然后page2將對應消息內容展示出來。

圖片效果

 

首先我們需要兩個頁面,然后必須分別位於不同的域名下,當然本機肯定要有一個web服務器,接下來就通過修改host來實現不同域名訪問

主頁http://www.postmessage1.com/page1.html 里面嵌套一個iframe框架

<! DOCTYPE html >
< html >
< head >
     < script  type ="text/javascript" >     
    window.onload 
=   function (){
        
var  iframeWindow  =  document.getElementById( ' frame1 ' ).contentWindow;
        document.getElementById(
' send ' ).onclick  =   function (){
            
// 獲取要發送給框架頁面的消息
             var  value  =  document.getElementById( ' text1 ' ).value;
            
// postMessage第一個參數為發送的內容
             // 第二個參數為要要傳送的目的地,當然如果不限於任何域名的話可以填*字符,以表示全部
            iframeWindow.postMessage(value,  ' http://www.postmessage2.com ' );
        }
    }    
    
</ script >
</ head >
< body >
< iframe  id ="frame1"  name ="frame1"  src ="http://www.postmessage2.com/page2.html" ></ iframe >
< input  type ="text"  id ="text1"  value =""   />
< input  type ="button"  id ="send"  value ="發送"   />
</ body >
</ html >

 iframe框架的src地址為http://www.postmessage2.com/page2.html

<! DOCTYPE html >
< html >
< head >
     < script >
        window.onload
= function (){
            
function  handMessage(event){
                event 
=  event  ||  window.event;
                
// 驗證是否來自預期內的域,如果不是不做處理,這樣也是為了安全方面考慮
                 if (event.origin  ===   ' http://www.postmessage1.com ' ){
                    document.getElementById(
' divMessage ' ).innerHTML  =  event.data;
                }
            }
            
// 給window對象綁定message事件處理
             if (window.addEventListener){
                window.addEventListener(
" message " , handMessage,  false );
            }
            
else {
                window.attachEvent(
" onmessage " , handMessage);
            }      
        }        
    
</ script >
</ head >
< body >
我是不同域的iframe頁面,下面是接受到的消息內容
< div  id ="divMessage" ></ div >
</ body >
</ html >

這樣當點擊send按鈕的時候,就能把page1.html文本框中的消息傳遞到page2.html頁面中了

目前postMessage大部分的主流瀏覽器都兼容了,IE6,IE7除外,如果是針對國外的網站基本不用這兩個了所以放心使用吧,如果是國內要考慮這兩者瀏覽器或者以這兩者為內核的360之類瀏覽器,則還是考慮之前說的那幾種跨域處理方式吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM