跨文档消息通信


html5 postMessage解决跨域、跨窗口消息传递

了解窗口间通讯的方式

在不同的页面,不同的浏览器窗口间进行页面的访问操作,有哪几种方式?

1.同域

iframe

    可以通过JS去访问被包含页面的DOM元素,同样:被包含的页面(子级)也可以操作包含页面(父级)的元素。

总结 : 父级改变子级:子级.contentWindow

             子级改变父级 : parent(是一个window对象),如果当前页面是顶级的(上面没有被其他页面所包含),那么parent就是当前页面的window对象,如果被包含了,则parent就是包含当前页面的父级页面的window对象

    如果要操作一个iframe中的DOM, 首先要获取到iframe引入的页面的  window.iframe.contentWindow(被ifram包含的页面的window对象)

2.window.open

window.open返回被打开窗口的window对象,所以直接用这个返回值就可以操作

2.跨域窗口操作

在www.a.com里操作www.b.com的iframe,

浏览器会报错 :Permlsslon denled to access property document,跨域了。

当本页面和被包含页面,不在同一个域名下的时候(在www.a.com里操作www.b.com的iframe,浏览器会报错 :Permlsslon denled to access property 'document'),这样的操作就会有跨域的操作安全限制问题。

今天介绍的是HTML5跨域解决方法。

postMessage对象

可以通过这个方法,给另外的窗口发送信息。是window对象下的方法。

接收信息的窗口对象.postMessage注意 :不是当前窗口,和我们想象的不一样,不是当前窗口.postMessage。

需要牢记的是:只要操作不同窗口对象,第一步就是要获取窗口对象.contentWindow

·接收消息的窗口对象.postMessage()

·一参:发送的数据,二参:接收的域

在a.com下写以下截图内容,omyIframe就是a.com引入的iframe,现在就是要操作这个iframe

·交互方式

    --iframe : 父页面:contentWindow、子页面:window.top

    --窗口页 :父页面,window.open、子页面:window.opener

·接收事件

    --message:当窗口接收到通过postMessage发送过来的数据时候触发

    --ev.origin : 发送数据来源的域

    --ev.data : 发送的数据


总结流程: 

如以上的情况 :在www.a.com里操作www.b.com的iframe(以下简称a域、b域),在a域里通过postMessage发送了一个字符到被接收message的页面,告诉他要做什么,b域接收到这个信息以后判断一下,如果是“1”。。。。如果是2.。。。(根据接收到的信息做你要做的事情)

通过以上可以看出,其实并不是直接进行操作,而是通过postMessage进行中转,postMessage相当于是一个中间人,传口令一样的把某些传给另一个窗口,从而实现。

如果这么做,那么其他的,比如baidu.com也写了postMessage这么一段话,是不是也可以把我的页面包含进来改掉某部分呢?是可以的。但是如果我的页面,如果只想b.com发送postMessage的时候可以改,别的域名发送不可以改,如何分辨是谁发送的?就是用:ev.origin : 发送数据来源的域。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (关于跨域通信问题,先要将服务器配置好,添加两个不同域名,方便操作) 一、跨文档消息通信(同域名) iframe ...
    EndEvent阅读 2,999评论 0 1
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    他在发呆阅读 4,210评论 0 0
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    w_zhuan阅读 3,547评论 0 0
  • 跨域问题产生的原理是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js...
    往复随安_cc75阅读 3,468评论 0 1
  • 01 这几天被那篇陪孩子做作业陪到心梗住院的文章刷屏了,紧接着又延伸出好多陪作业的妈妈吐糟汇总的贴子,看得我这个陪...
    迅图阅读 5,645评论 0 2

友情链接更多精彩内容