js 简单使用postMessage iframe跨域通信

JavaScript09

js 简单使用postMessage iframe跨域通信,第1张

postMessage是html5引入的API,postMessage()方法允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档,多窗口,跨域消息传递.多用于窗口间数据通信,这也使它成为跨域通信的一种有效的解决方案.

要发送到其他窗口的数据,它将会被 !结构化克隆算法 序列化.这意味着你可以不受什么限制的将数据对象安全的传送给目标窗口而无需自己序列化.

通过窗口的origin属性来指定哪些窗口能接收到消息事件,指定后只有对应origin下的窗口才可以接收到消息,设置为通配符"*"表示可以发送到任何窗口,但通常处于安全性考虑不建议这么做.如果想要发送到与当前窗口同源的窗口,可设置为"/"

是一串和message同时传递的 Transferable 对象,这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权.

下面是打印出的结果 data属性为传输过来的数据

若用到的地方很多 建议加上 targetOrigin 属性 并且给数据加好type确保数据正确的被接收

欢迎对这个有研究、有兴趣或者发现文章有错误的地方的伙伴们和我交流,共同进步~~~

服务端设置支持跨域

主要是Access-Control-Allow-Origin头参数,该参数用来指定允许哪个来源的域请求。服务端代码如下:

// 表示支持所有来源的域进行请求

// 实际在操作过程中可以设置为指定域

header('Access-Control-Allow-Origin:*')

$data = json_encode(array("id" => "1", "name" => "tom"))

echo $data

对应的js代码:

$.ajax({

    type: "POST",

    url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/header.php",

    dataType: "json",

    success: function(data) {

        console.log(data)

    }

})