最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 七日打卡-窗口间通信postMessage

    正文概述 掘金(LXX5785)   2021-01-14   478

    在前端应用中,窗口间的通信用的地方还是挺多的,比如弹出qq登录认证窗。

    七日打卡-窗口间通信postMessage

    postMessage语法

    window.postMessage(msg,targetOrigin)
    

    注意postMessage要通过window对象调用!因为这里的window不只是当前window,大部分使用postMessage的时候,都不是本页面的window,而是其他网页的window!如:

    1. iframe的contentWindow
    2. 通过window.open方法打开的新窗口的window
    3. window.opener

    如果你使用postMessage时没有带window,那么,你就是用的本页面的window来调用了它。

    参数说明

    msg

    这就是要传递的消息了。它可以是一切javascript参数,如字符串,数字,对象,数组,而不是和json一样只局限于字符串。

    targetOrigin

    这个参数称作“目标域”,注意啦,是目标域不是本域!比如,你想在2.com的网页上往1.com网页上传消息,那么这个参数就是“http://1.com/”,而不是2.com.

    另外,一个完整的域包括:协议,主机名,端口号。如:http://g.cn:80/

    window.open方法会返回一个窗口对象,使用这个对象可以向子窗口发送消息,而子窗口可以通过window.opener向父窗口发送消息,示例如下: index.html

    <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

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元