postMessage处理iframe跨域通信

实例

父页面发消息给子页面,子页面接收消息后回复父页面。

父页面代码:

<body>
    父级页面:
    button id="btn">给iframe子页面传递消息button</button>
    iframe src="index2.html" id="iframe1"></iframescript>
        var btn = document.getElementById('btn);
        btn.addEventListener(click,function() {
             data  {
                message: 子页面应该接收的消息
            }
            // 给子页面发送消息
            document.getElementById(iframe1).contentWindow.postMessage(data,1)">"/);
        },1)">false);
        
         接收子页面传递的消息
        window.addEventListener(message(e) {
            console.log(e.data);  父页面:我接收到消息了
        },1)">);
    >
>

iframe子页面代码:

script type="text/javascript">
     接收父页面发送的内容
    window.addEventListener((e) {
        console.log(e.data)  {message: "子页面应该接收的消息"}
        
         接收内容后,我们也可以给父页面发消息
        window.parent.postMessage(父页面:我接收到消息了);
    },1)">);
>

message事件

  • data 包含任意字符串数据,由原始脚本发送
  • origin 一个字符串,包含原始文档的方案、域名以及端口(如:http://domain.example:80)
  • lastEventId 一个字符串,包含了当前的消息事件的唯一标识符。
  • source 原始文件的窗口的引用。更确切地说,它是一个WindowProxy对象。
  • ports 一个数组,包含任何MessagePort对象发送消息。

我们可以打印下子页面接收父页面的消息的对象,如下:

// 接收父页面发送的内容
    window.addEventListener('message',function(e) {
        console.log(e)
    },false);

打印结果:

postMessage方法

postMessage方法支持两个参数,具体参考下表:

  • message:发送的数据
  • targetOrigin: 发送数据的来源

postMessage方法中的message参数不仅仅可以是字符串,结构对象、数据对象(如:FileArrayBuffer)或是数组都是可以的。在IE8/IE9/FireFox3.6及其以下版本只支持字符串数据。

targetOrigin参数指接收文档的来源。除非接收信息浏览上下文来源于提供的targetOrigin中的一个匹配,否则浏览器是不会发送消息的。直接使用"*"通配符绕开限制,但显然这样很不安全。您在实际使用的时候务必指定目标来源。您还可以通过使用"/"来限制信息只能同源发送。

参考地址

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)