美文网首页
窗口间通信postMessage

窗口间通信postMessage

作者: 虎虎虎呼呼 | 来源:发表于2017-09-01 15:35 被阅读0次

    窗口间的通信用的地方还是挺多的,比如弹出qq登录认证窗。先上兼容性


    兼容性

    基本用法其实也比较简单。
    window.open方法会返回一个窗口对象,使用这个对象可以向子窗口发送消息,而子窗口可以通过window.opener向父窗口发送消息,先新建两个html
    index.html(只展示body,其他地方省略了)

    <body>
        <button onclick="opwin()">打开</button>
        <script type="text/javascript">
        function opwin() {
            //保留窗口对象
            var popup = window.open("test.html", "_blank");
        }
        function receiveMessage(event) {
            //event.origin是指发送的消息源,一定要进行验证!!!
            if (event.origin !== "http://localhost")return;
            //event.data是发送过来的消息。
            console.log(event.data);
            //event.source是指子窗口,主动向子窗口发送消息可以用popup
            //postMessage有两个参数,消息和自己的源(例如http://www.baidu.com),自己的源应该和目标源相同。否则发送会失败。
            event.source.postMessage("我是主窗口,我接收到消息了",window.location);
        }
        //添加消息接收函数
        window.addEventListener("message", receiveMessage, false);
        </script>
    </body>
    

    test.html

    <body>
        <button onclick="send()">发送</button>
        <script type="text/javascript">
        function send() {
            //window.opener指的就是父窗口(打开本窗口的窗口)
            window.opener.postMessage("我是子窗口,向主窗口发送消息", window.location);
        }
        function receiveMessage(event) {
            if (event.origin !== "http://localhost")return;
            console.log(event.data);
        }
        window.addEventListener("message", receiveMessage, false);
        </script>
    </body>
    

    由于postMessage是通过网络协议,所以不能以直接在浏览器打开html的方式进行调试。而是应该放在服务器上,走网络协议
    比如,这样是不对的


    错误

    这样才行

    正确

    相关文章

      网友评论

          本文标题:窗口间通信postMessage

          本文链接:https://www.haomeiwen.com/subject/qqkgdxtx.html