ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何在浏览器选项卡之间共享单个js资源?

2019-09-27 16:34:00  阅读:284  来源: 互联网

标签:long-polling javascript socket-io local-storage single-page-application


例如,我想通过socket.io,longpolling等多个选项卡刷新聊天消息…无论我有什么…为此,我只想为所有选项卡使用单个连接.我该怎么做?我可以将常用数据存储在localStore,cookies等中……我需要某种信号量,它只为其中一个选项卡提供单个同步器资源,在该选项卡关闭后,它会提供给另一个选项卡,等等. ..这怎么可能?我想到的唯一解决方案是告诉localStore onbeforeunload资源是免费的,但这并不适用于每个浏览器.还有其他选择吗?

解决方法:

这个问题中的关键词是“标签间通信”,“跨窗口消息传递”等…

一种解决方案类似于长轮询:inter-tab-communication-using-local-storage/定期请求localStore / cookie进行更改,并添加一个队列来分配公共资源(例如socket.io连接).您可以使用onbeforeunload或timeout来确定是否导航或关闭选项卡/窗口.在那之后不久,队列中的下一个选项卡将分配资源……

第二种解决方案是使用“localStore存储事件”.在这种情况下,您不必定期询问localStore(如果onbeforeunload事件可用).根据这一点:localStorage eventHandler Doesn’t Get Called存储事件旨在仅影响其他选项卡,因此它们是intertab通信的不错选择.唯一的问题是onunload:local storage on window unload event.因此,由于缺乏onunload支持,第一种解决方案可能会更好.

第三个解决方案是使用“共享webworkers”,但它们尚未在多个浏览器(Internet Explorer)中实现,或者它们无法打开socket(firefox).所以目前它们不是一个选项,可能在修复错误后1 – 2年……这是一个演示 – 仅限工作铬 – html5-shared-web-worker-examples.

第四个解决方案是window.postMessage,目前尚未完成浏览器支持.我在一些sto问题中读过它,并且他们都写道postMessage不能满足我们的需求.我没有检查有关该功能的确切细节,我认为这不值得…有一个关于跨域交叉iframe通信的例子:Cross-Domain iframe communication但我认为不可能进行相同的域跨窗口通信.

第五个解决方案是使用cookie,但在这种情况下,每个选项卡都应该ping document.cookie,因为没有cookie更改事件,比如localstore中的存储事件. BNC Connector使用这种方法.

第六种解决方案是使用WebSQL.它的驱动程序是异步非阻塞,所以它会比localStorage更好,但目前它不受firefox和msie的支持.

结论:

现在 – 2013.10.03 – 从资源利用者选项卡定期ping localStore的最佳选择.其他选项卡应该侦听时间戳更新的存储事件.如果该事件没有及时,则资源utilizer选项卡具有超时,并且队列中的下一个选项卡应获取资源.也许以后onunload事件或共享工作人员将是可靠的,但目前他们还不够好……

解:

我找到了结论中描述的方法的实现:
intercom.js
我添加了一个关于资源共享的一般接口的issue,但在我的情况下,单个socket.io资源就足够了……

标签:long-polling,javascript,socket-io,local-storage,single-page-application
来源: https://codeday.me/bug/20190927/1824022.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有