zoukankan      html  css  js  c++  java
  • html postMessage 创建聊天应用

    应用说明:

    这个例子演示如何在门户页面以iframe方式嵌入第三方插件,示例中使用了一个来域名下的应用部件,门户页面通过postMessage来通信。iframe中的聊天部件通过父页面标题内容的闪烁来通知用户。不过,由于部件不在父页面中,而是被隔离在一个来之不同源的页面中,所以部件使用postMessage来修改父页面标题!

    1、创建门户页面

    <!DOCTYPE>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <title>postMess</title>
    <style>
        iframe{
            width:400px;
            height:300px;
        }
    </style>
    <script>
        var defaultTitle = 'Portal[http://localhost]';
        var sourse = 'http://localhost';
        var notificationTimer = null;
        function messageHander(e){
            if(e.origin == sourse){
                notify(e.data);
            }else{
                //
            }
        }
        function sendString(s){
            document.getElementById('wid').contentWindow.postMessage(s,sourse);
        }
        function notify(message){
            stopBinking();
            blinkTitle(message,defaultTitle);
        }
        function stopBinking(){
            if(notificationTimer !== null){
                clearTimeout(notificationTimer);
            }
            document.title = defaultTitle;
        }
        function blinkTitle(m1,m2){
            document.title = m1;
            notificationTimer = setTimeout(blinkTitle,1000,m2,m1);
        }
        function sendStatus(){
            var statusText = document.getElementById('statusText').value;
            sendString(statusText);
        }
        function loadDemo(){
            document.getElementById('sendButton').addEventListener('click',sendStatus,true);
            document.getElementById('stopButton').addEventListener('click',stopBinking,true);
            sendStatus();
        }
        window.addEventListener('load',loadDemo,true);
        window.addEventListener('message',messageHander,true);
    </script>
    </head>
    <body>
        
        Status<input type="text" id="statusText" value="online"/>
        <button id="sendButton">change status</button>
        <p>
            <button id="stopButton">stop Binking title</button>
        </p>
        <iframe id="wid" src="get.html"><iframe>
    </body>
    </html>

    2、创建聊天部件页面

    <!DOCTYPE>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <title>postMess</title>
    <script type="text/javascript">
        var sourse = 'http://localhost';
        function messageHander(e){
            if(e.origin === sourse){
                document.getElementById('status').textContent = e.data;
            }else{
                //
            }
        }
        function sendString(s){
            window.top.postMessage(s,sourse);
        }
        function loadDemo(){
            document.getElementById('actionButton').addEventListener('click',function(){
                var messText = document.getElementById('messText').value;
                sendString(messText);
            },true);
        }
        window.addEventListener('load',loadDemo,true);
        window.addEventListener('message',messageHander,true);
    </script>
    </head>
    <body>
        status set to:<strong  id="status" /></strong>
        <div>
            <input type="text" id="messText"  value="wid nodd" />
            <button id="actionButton">send nodd</button>
        </div>
    </body>
    </html>
  • 相关阅读:
    MySQL读写分离
    Error:(1, 1) java: 非法字符: ‘ufeff’
    Java 集合系列(四)—— ListIterator 源码分析
    Java 集合系列(三)—— LinkedList
    Java 集合系列(二)—— ArrayList
    Java 集合系列(一)
    Docker之进入容器(三)
    Docker之常用命令(二)
    Docker之初识(一)
    Redis可视化工具 Redis Desktop Manager
  • 原文地址:https://www.cnblogs.com/shizhouyu/p/4871096.html
Copyright © 2011-2022 走看看