使用JS在多个页面之间相互通讯与调用

GitHub:https://github.com/roomanl/ev...html

这几天作一个web项目有这样一个需求,web项目是一个后台管理系统,在使用系统时会打开不少标签页,每一个标签页就是一个iframe打开的一个新的html页面,如今须要在每一个标签页之间互相通讯、互相调用方法。例如:打开了A,B,C三个标签页,我在C页面把数据修改了,我要通知A,B两个页面的数据也要更新到最新修改的数据。git

在网上看到的解决办法都是用iframe 父页面与子页面互相调用方法,可是用这种方法感受一点都不灵活,不是很好用,有很大的局限性。github

后来在使用localStorage存储的时候发现localStorage有这样一个特性。web

在A界面监听storage事件。浏览器

window.addEventListener("storage", function (e) {tomcat

alert(e.key+'='+e.newValue);服务器

});spa

在B页面修改或添加了localStorage。htm

localStorage.setItem('key', 'value');blog

而后A界面的监听事件里就能够接收到通知。

利用这个特性我封装了一个JS,代码以下:

1531391771682de7ff7a8f2
153139177191996ca7b5906

用法很简单,在全部页面都引入上面的JS,而后在A,B页面添加监听事件。

1531391772045ed7ed00eee

C页面对数据进行了修改后就发一个通知给A,B页面,让A,B页面进行相应的操做。

15313917721268575128297

就这样一个多页面之间互相通讯调用的JS就封装好了,iframe与iframe之间的页面能够互相通讯调用。浏览器每一个标签页之间的页面也能够互相通讯调用。

不过须要注意如下几点:

一、 互相通讯调用之间的几个页面要放在服务器环境,例如放在IIS或者tomcat之类的服务容器里。

二、 打开的几个页面要是同源页面,也就是几个页面之间IP相同,端口相同。

三、 打开的几个页面必须是在同一个浏览器。

四、 发送通知传的参数如今还只能是字符串,若是要传JSON类型,请先在C页面转字符串,在A,B接收到通知后,再把字符串转回JSON。

五、同一个页面接收不到同一个页面发送的通知,固然谁也不会作这种事,在同一个页面接收同一个页面发送的通知。

相关文章
相关标签/搜索