Heim >Web-Frontend >H5-Tutorial >Ausführliche Erläuterung der PostMessage-Codebeispiele der domänenübergreifenden HTML5-Informationsinteraktionstechnologie

Ausführliche Erläuterung der PostMessage-Codebeispiele der domänenübergreifenden HTML5-Informationsinteraktionstechnologie

黄舟
黄舟Original
2017-03-16 15:53:181794Durchsuche

我们知道传统的HTML 规范中对于跨域的请求有这严格的限制,如果没有这个限制,将会发生很可怕的事情,设想一个场景当你在公司上班打开公司内部的管理信息系统,同时你打开了另一个外部网页页面, 那个外部网页中的动态脚本比如JS 脚本可以嗅探到你公司内部管理信息系统的内容,假如你公司的信息系统是一些敏感的信息时,其实你在不知不觉中已经泄漏了公司的信息,由此可能将会造成给公司很大的损失,所以浏览器是阻止这些跨域访问。

  但是现实生活中有一些合理的跨域名站点间的交互,读者可能知道 传统HTML 规范中关于跨域的解决方法,
比如 iframe方式、jsonp方式等,今天我要说的是HTML5 中关于跨域数据交互方面的知识。
  
  HTML5中引入了 一个新的API 称为 postMessage ,其实postMessage不管是否有跨域操作, 都建议使用postMessage 来传递消息。
  
  废话不多说,看一个Demo 先。
我们配置两个域名 http://www.yuetong.com/
                 http://my.bbs.com/
在 http://www.yuetong.com/ 域下新建 comm_main.html, 地址 为http://www.yuetong.com/comm_main.html
文件内容如下

 
nbsp;html>

    
    <meta>
    <title>跨站通信 当前域 http://www.yuetong.com</title>
    <script>
function sendMsg(){
    if(typeof window.postMessage == undefined){
        //
        alert("对不起 您的浏览器不支持 postMessage 特性");
        return false;
    }
    var msg = document.getElementById("message").value;
    document.getElementsByTagName("iframe")[0].contentWindow.postMessage(msg,"http://my.bbs.com");
}
var originWhiteList = ["http://my.bbs.com"];
function checkWhiteList(origin){
    for(var i=0; i< originWhiteList.length; i++){
        if(origin == originWhiteList[i]){
            return true;
        }
    }
    return false;
}
/** 接受消息 */
function messageHandler(e){
    if(checkWhiteList(e.origin)){
        processMessage(e.data);
    }else{
        // ignore message
    }
}
function processMessage(d){
    alert(d);
}
window.addEventListener("message", messageHandler, true);
    </script>


<h1>您好,我这里是http://www.yuetong.com/</h1>
<input>
<input>
<br>
<iframe></iframe>
<p></p>

在 http://my.bbs.com/ 域下新建 comm_client.html, 地址 为http://my.bbs.com/comm_main.html,文件内容如下

nbsp;html>

    
    <meta>
    <title>跨站通信 当前域 http://my.bbs.com</title>
<script>
var originWhiteList = ["http://www.yuetong.com"];
function checkWhiteList(origin){
    for(var i=0; i< originWhiteList.length; i++){
        if(origin == originWhiteList[i]){
            return true;
        }
    }
    return false;
}
function messageHandler(e){
    if(checkWhiteList(e.origin)){
        processMessage(e.data);
    }else{
        // ignore message
    }
}
function processMessage(d){
    var ta = document.getElementsByTagName("textarea")[0].value;
    ta += d + "Ausführliche Erläuterung der PostMessage-Codebeispiele der domänenübergreifenden HTML5-Informationsinteraktionstechnologien";
    document.getElementsByTagName("textarea")[0].value = ta;
}
function sendMsg(){
    var msg = document.getElementById("message").value;
    window.top.postMessage(msg,"http://www.yuetong.com");
}
window.addEventListener("message",messageHandler,true);
</script>


<h1>您好,我这里是 http://my.bbs.com/</h1>
<input>
<input>
<textarea></textarea>

配图1,当再输入框中输入"你好,朋友" 可以看到iframe窗口中 收到消息。

Ausführliche Erläuterung der PostMessage-Codebeispiele der domänenübergreifenden HTML5-Informationsinteraktionstechnologie

配图1

我们在iframe 窗口中输入“我很好" ,主窗口收到消息并弹出 提示框

Ausführliche Erläuterung der PostMessage-Codebeispiele der domänenübergreifenden HTML5-Informationsinteraktionstechnologie

   其中最为重要 为增加  message 消息的监听和处理, 以及信任站点的配置。


Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der PostMessage-Codebeispiele der domänenübergreifenden HTML5-Informationsinteraktionstechnologie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn