相关疑难解决方法(0)

浏览器标签/窗口之间的Javascript通信

在同一浏览器的选项卡/窗口之间进行Javascript通信的最可靠方法是什么?例如,当Tab 2开始音频播放时,Tab 1以某种方式知道这一点并且可以暂停它的播放器.

我正在建立一个带有音乐播放器的网站...所以,如果你打开两个标签到网站,你可以在两者上开始播放音乐.这显然很糟糕,所以我试图找到一个解决方案.

有任何想法吗?谢谢

javascript browser

144
推荐指数
8
解决办法
13万
查看次数

标签或窗口之间的通信

我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:

  1. 使用窗口对象
  2. 的postMessage
  3. 饼干
  4. localStorage的

第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.

第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.

第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.

使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.

编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.

javascript browser html5 ipc broadcast-channel

136
推荐指数
7
解决办法
7万
查看次数

跨浏览器标签共享websocket?

我们希望每个浏览器有一个套接字,而不是浏览器中每个选项卡一个.我们怎样才能实现它?我读到了有希望的共享网络工作者.对此的参考也值得赞赏.不幸的是,据我所知,mozilla或Internet Explorer尚未实现共享Web工作者.那么在这种情况下该怎么办?我们正在服务器端的node.js上工作.

javascript html5 web-worker websocket node.js

35
推荐指数
5
解决办法
2万
查看次数

Javascript:在标签之间共享数据

在浏览器中打开选项卡之间共享数据的最佳方法是什么?

javascript

31
推荐指数
4
解决办法
5万
查看次数

Javascript:如何获取所有打开的窗口列表

假设您打开一些窗口:

  window.open(url1,'win1');
  window.open(url2,'win2');
  window.open(url3,'win3');
Run Code Online (Sandbox Code Playgroud)

(每个窗口都有一个唯一的名称)

然后你刷新页面.

3个弹出窗口仍然打开.有没有办法列出所有打开的窗口的名称并关闭它们?

这不是一个重复的问题.

在这个问题中,浏览器正在刷新,因此您不能简单地使用全局数组来跟踪子窗口.

这不是一个重复的问题.

javascript window

7
推荐指数
1
解决办法
1万
查看次数

浏览器多个选项卡中的不同连接

为什么 SignalR 在浏览器的多个选项卡中为同一登录用户建立不同的连接。有没有办法为在同一浏览器中打开的所有选项卡建立一个连接。从连接我的意思是 SignalR 中用户的 connectionID。

signalr signalr-hub signalr.client

7
推荐指数
1
解决办法
7139
查看次数

使用JavaScript在窗口/标签之间进行通信

如何在同一个域上有两个选项卡(或窗口)能够相互通信而无需另一个窗口实例.

编辑:为什么在另一个问题之前被问到这个标记为重复?

javascript windows communication cross-browser

6
推荐指数
2
解决办法
7407
查看次数

更改其他页面的元素属性

大家好,我的网站有问题.情况如下:

第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实现这一点?

javascript jquery

2
推荐指数
1
解决办法
4029
查看次数

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

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

javascript long-polling local-storage socket.io single-page-application

1
推荐指数
1
解决办法
3080
查看次数