通信API

Demo.html(主窗體)

<!DOCTYPE html />
<html>
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <!--
        跨文檔消息傳輸:
        HTML5提供了在網頁文檔間互相接收與發送信息的功能,只要獲取網頁所在窗口對象實例,不同源的Web頁面可互相通信
        //監聽來至其他窗體的消息
        window.addEventListenter("message", function(ev){...}, false);
        //發送消息到其他窗體
        window.postMessage(message, targetOrigin);
        message:為所發送的消息文本,也可為任意js對象(需通過JSON轉換對象為文本)
        targetOrigin:為接收消息對象窗口的URL地址(如:http://localhost:8080/)
        ev參數:origin屬性,獲取消息發送源URL地址
               data屬性,可取的消息內容
               source屬性,可獲取消息發生源的窗口代理對象

        Web Sockets通信:
        HTML5提供的在Web應用程序中客戶端與服務器端之間進行的非HTTP通信機制
        使用Web Sockets API可以在服務器與客戶間建立一個非HTTP雙向連接,該連接是實時的,永久的(除非顯示關閉)
        只要客戶端有一個打開的socket且與服務器連接,服務器就可與之通信,不需再輪詢客戶端請求,轉被動為主動
        var webSocket = new WebSocket("ws://localhost:8005/socket");
        -->
        <div id="msg"></div>
        <iframe width="400" src ="Other.html"></iframe>
        <script type="text/javascript">
            //監聽message事件,接收消息
            window.addEventListener("message", function (ev) {
                document.getElementById("msg").innerHTML = "從:" + ev.origin + ",那裡傳來消息:" + ev.data;
            }, false);

            function hello() {
                var iframe = window.frames[0];
                //發送消息
                iframe.postMessage("你好", "*");
            };
            hello();
        </script>

        <div id="msg2">
        </div>
        <input id="text" type="text" />
        <button id="connect" οnclick="connect();">建立連接</button>
        <button id="send" οnclick="send();">發送數據</button>
        <button id="disconnect" οnclick="disconnect();">斷開連接</button>
        <script type="text/javascript">
            var webSocket;
            //創建socket連接
            function connect() {
                var msg = document.getElementById("msg2");
                try{
                    var readyState = new Array("正在連接","已經連接","正在關閉連接","已關閉連接");
                    var host = "ws://localhost:8005/socket";
                    webSocket = new WebSocket(host);
                    webSocket.onopen = function(){
                        msg.innerHTML += "<p>Socket狀態:" + readyState[webSocket.readyState] + "</p>";
                    };
                    webSocket.onmessage = function(msg){
                        msg.innerHTML += "<p>接收信息:" + msg.data + "</p>";
                    };
                    webSocket.onclose = function(){
                        msg.innerHTML += "<p>Socket狀態:" + readyState[webSocket.readyState] + "</p>";
                    };
                }
                catch (exception) {
                    msg.innerHTML += "<p>有錯誤發生</p>";
                }
            };

            //發送數據到後臺
            function send() {
                var text = document.getElementById("text").value;
                var msg = document.getElementById("msg2");

                if (text == "") {
                    msg.innerHTML += "<p>請輸入</p>";
                    return;
                }

                try {
                    webSocket.send(text);
                    msg.innerHTML += "<p>發送數據:" + text + "</p>";
                }
                catch (exception) {
                    msg.innerHTML += "<p>數據發送失敗</p>";
                }

                document.getElementById("text").value = "";
            };

            //關閉數據庫
            function disconnect() {
                webSocket.close();
            };
        </script>
    </body>
</html>


Other.html(內嵌套子窗體)

<!DOCTYPE html />
<html>
    <head>
        <meta charset="utf-8" />
        <script type="text/javascript">
            //監聽message事件,接收消息
            window.addEventListener("message", function (ev) {
                document.body.innerHTML = "從:" + ev.origin + ",那裡傳來消息:" + ev.data;
                //發送消息
                ev.source.postMessage("這裡是" + this.location, "*");
            }, false);
        </script>
    </head>
    <body>
    子頁面
    </body>
</html>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值