跨窗口通信的几种方法
来源:互联网 发布:淘宝拍a发b那些平台 编辑:程序博客网 时间:2024/06/05 19:51
1. localStorage[推荐使用]
通过监听window对象的”storage”事件,其他窗口获取到本窗口发送的消息,注意,必须是同一款浏览器,并且在同一个域名下。
// 本窗口的设值代码localStorage.setItem("EVENT.PUB", JSON.stringify({username : 'yiifaa', now : Date.now()})) // 请务必注意,localStorage不能直接传送复合类型的值(对象)// 其他窗口监听storage事件 $(window).on('storage', function(ev) { var event = ev.originalEvent, message = JSON.parse(event.newValue);// 解析出复合的对象值 // 对获取到的值进行处理 console.log(message) })
2. sessionStorage + setInterval[不推荐]
因为sessionStorage难以侦测到值的变化,所以必须配合定时检测,效率较低,不推荐使用。
3. 父窗口引用
通过父子窗口的引用关系(以’window.open’或’target=_blank’方式打开子窗口),子窗口很容易感知到父窗口作用域值的变化,但是当子窗口刷新后,父子窗口之间的引用关系会消失,此时子窗口也不能接收到父窗口的消息。
4. cookie + setInterval[不推荐]
与第2中方法相比,效率更低,效果更差,传送的内容也少,强烈不推荐。
5. WebSocket[兼容性最佳]
所有的WebSocket都监听同一个服务器地址,利用send发送消息,利用onmessage获取消息的变化,不仅能窗口,还能跨浏览器,兼容性最佳,只是需要消耗点服务器资源。
var ws = new WebSocket("ws://www.example.com/socketserver");ws.onopen = function (event) { // 或者把此方法注册到其他事件中,即可与其他服务器通信 ws.send({username : 'yiifaa', now : Date.now()}); // 通过服务器中转消息};ws.onmessage = function (event) { // 消费消息 console.log(event.data);}
6. 其他
有人提出用Worker解决跨窗口通信,其实是行不通的,即使使用引用的同一个任务js文件,但只能自己跟自己通信。
0 0
- 跨窗口通信的几种方法
- 弹出窗口的几种方法
- 新弹出窗口的几种方法
- 弹出窗口的几种方法
- 弹出窗口的几种方法
- 窗口置前的几种方法
- 窗口置前的几种方法
- js关闭窗口的几种方法
- C#隐藏窗口的几种方法
- 查找窗口的几种方法
- 得到窗口句柄的几种方法
- js关闭窗口的几种方法
- 进程间通信的几种方法
- Linux通信的几种方法
- 进程间通信的几种方法
- 实现浏览器全屏窗口的几种方法
- JavaScript实现网页弹出式窗口的几种方法
- 实现浏览器全屏窗口的几种方法
- 基本数据类型总结
- CSUOJ 1224 ACM小组的古怪象棋(BFS)
- git学习笔记
- 在 Windows 上安装Rabbit MQ 指南
- nyoj 586 疯牛
- 跨窗口通信的几种方法
- Android工具类之Toast统一管理类
- 【Android】Eclipse自动编译NDK/JNI
- 网页制作工具
- YYKit - YYModel 使用方法
- Java多线程总结之线程安全队列Queue
- UICollectionViewLayout的使用
- Hbase的table存储详解
- 判断单选框是否选中