postMessage跨域传消息(用作跨域登录)

父页面:

    <html>
    <body>
    <h2>page A</h2>
    
    <h1 class="header">page A</h1>
    <div class="mb20">
        <button style="font-size:20px;" onclick="send()">post message</button>
    
    </div>
    <!-- 跨域的情况 -->
    <iframe src="http://localhost:8880/#/login" name="frmName" style="display: none; "></iframe>
    
    <script>
        //发送消息给子页面
        function send() {
            var data = {};
            //我用这个来作为某类消息
            data.msgType = "login";
            data.a1="hello";
            //iframe的src需要和下面第二个参数的域相同,不然会有错误信息在控制台
            window.frames['frmName'].postMessage(data, 'http://localhost:8880/#/login'); // 触发跨域子页面的messag事件
    
        }
    
        var varWindow = window;
        //接收子页面返回的消息(注意:这个listen也可以接受其它页面postmessage过来的消息)
        window.addEventListener('message', function(messageEvent) {
            var data = messageEvent.data;
            console.info('message from child:', data);
            varWindow.open('http://localhost:8880/#/dashboard');
        }, false);
    </script>
    </body>
    </html>

子页面:只要有addEventListener即可

        window.addEventListener('message', function(ev) {
            var data = ev.data;
            console.info('message from parent:', data);
            //一般这类有特殊用途的,都加个msgType,这样可以过滤掉其它postmessage。目前还不得而知是否有聪明点的办法
            if(data.msgType!=null && data.msgType === 'login'){
                //登录操作,保存登录信息到local storage,然后父页面window.open到Index页面,即可完成跨域登录
              parent.postMessage("OK", 'http://localhost:8080/'); 
            }     
        }, false);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,715评论 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,848评论 1 45
  • 概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe...
    npmstart阅读 2,310评论 0 5
  • 跨域是什么 同源策略 在讲解什么是跨域之前先要清楚什么是同源策略,“同源政策”(same-origin polic...
    JRG_Orange阅读 1,048评论 0 52
  • 晚上,吃完晚饭,带着儿子在村里的公路上溜达,他突然指着天空说:“妈妈,好多星星。”抬头望去,星星很多,我拽着他的手...
    阳光之藤阅读 304评论 0 0

友情链接更多精彩内容