在同一浏览器的选项卡/窗口之间进行Javascript通信的最可靠方法是什么?例如,当Tab 2开始音频播放时,Tab 1以某种方式知道这一点并且可以暂停它的播放器.
我正在建立一个带有音乐播放器的网站...所以,如果你打开两个标签到网站,你可以在两者上开始播放音乐.这显然很糟糕,所以我试图找到一个解决方案.
有任何想法吗?谢谢
我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:
第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.
第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.
第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.
使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.
编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.
我们希望每个浏览器有一个套接字,而不是浏览器中每个选项卡一个.我们怎样才能实现它?我读到了有希望的共享网络工作者.对此的参考也值得赞赏.不幸的是,据我所知,mozilla或Internet Explorer尚未实现共享Web工作者.那么在这种情况下该怎么办?我们正在服务器端的node.js上工作.
假设您打开一些窗口:
window.open(url1,'win1');
window.open(url2,'win2');
window.open(url3,'win3');
Run Code Online (Sandbox Code Playgroud)
(每个窗口都有一个唯一的名称)
然后你刷新页面.
3个弹出窗口仍然打开.有没有办法列出所有打开的窗口的名称并关闭它们?
这不是一个重复的问题.
在这个问题中,浏览器正在刷新,因此您不能简单地使用全局数组来跟踪子窗口.
这不是一个重复的问题.
为什么 SignalR 在浏览器的多个选项卡中为同一登录用户建立不同的连接。有没有办法为在同一浏览器中打开的所有选项卡建立一个连接。从连接我的意思是 SignalR 中用户的 connectionID。
如何在同一个域上有两个选项卡(或窗口)能够相互通信而无需另一个窗口实例.
编辑:为什么在另一个问题之前被问到这个标记为重复?
大家好,我的网站有问题.情况如下:
第1页
<script type="text/javascript" src="jscript.js">
<input type="button" value="change" onClick="changeAttr()">
Run Code Online (Sandbox Code Playgroud)
第2页
<script type="text/javascript" src="jscript.js">
<input type="text" value="Hello" id="dynamictext">
Run Code Online (Sandbox Code Playgroud)
jscript.js
function changeAttr(){
document.getElemenyById('dynamictext').value="World";
}
Run Code Online (Sandbox Code Playgroud)
现在这两个页面在不同的选项卡上打开.我想要发生的是,只要点击第1页上的按钮,第2页上的输入文本的值将变为"世界".如何使用Javascript或Jquery实现这一点?
例如,我想通过socket.io,longpolling等多个选项卡刷新聊天消息,无论我拥有什么...为此,我只想对所有选项卡使用单个连接。我该怎么做?我可以将公用数据存储在localStore,Cookie等...中,并且我需要某种信号量,该信号量仅将单个同步器资源分配给一个选项卡,并且在关闭该选项卡后,将其提供给另一个选项卡,依此类推。 ..那怎么可能?我想到的唯一解决方案是,通过onbeforeunload告诉localStore资源是免费的,但这并不是在所有浏览器中都有效。还有其他选择吗?
javascript long-polling local-storage socket.io single-page-application
javascript ×8
browser ×2
html5 ×2
ipc ×1
jquery ×1
long-polling ×1
node.js ×1
signalr ×1
signalr-hub ×1
socket.io ×1
web-worker ×1
websocket ×1
window ×1
windows ×1