Javascript 应用程序窗口和单个弹出窗口之间的通信
我有一个web应用程序在一个或多个浏览器选项卡/窗口中运行。我还有一个SharedWorker,它连接到每一个选项卡/窗口,还通过websocket与某些服务器通信。到目前为止,一切都按预期进行,没有任何问题 在那里,我还有一个带有SIP/WebRTC插件的弹出窗口(自动打开或与用户交互,这无关紧要)。打开后,我可以通过同一个SharedWorker与它进行通信,这没关系。 SharedWorker还根据worker中的Javascript 应用程序窗口和单个弹出窗口之间的通信,javascript,web-worker,Javascript,Web Worker,我有一个web应用程序在一个或多个浏览器选项卡/窗口中运行。我还有一个SharedWorker,它连接到每一个选项卡/窗口,还通过websocket与某些服务器通信。到目前为止,一切都按预期进行,没有任何问题 在那里,我还有一个带有SIP/WebRTC插件的弹出窗口(自动打开或与用户交互,这无关紧要)。打开后,我可以通过同一个SharedWorker与它进行通信,这没关系。 SharedWorker还根据worker中的connect事件和其他每个选项卡/窗口中的beforeUnload保存(或
connect
事件和其他每个选项卡/窗口中的beforeUnload
保存(或至少正在尝试)有关每个已连接选项卡/窗口的信息。这不是最好的解决方案,但我发现只有一个可行
所有内容都在同一个域、同一个位置上运行
现在,我找不到任何解决方案:
- 从其他选项卡/窗口获取弹出窗口句柄,而不是从其打开程序,也不可能将句柄转移到SharedWorker
- 每次对弹出窗口关闭做出反应,导致窗口工作端口丢失
- 每隔一个选项卡/窗口聚焦弹出窗口,因为它没有句柄
window.focus()
不起作用,它只有在从opener调用时才起作用,但是…@epascarello在某一点上,没有可用的打开窗口。在这一点上,您与所述窗口失去了联系。弹出窗口不能处理与共享工作人员的通信并接收事件,而它必须自己聚焦吗?你是在看一种观察者模式吗?postMessage还是window.opener…@Icepickle在弹出窗口上调用window.focus()
,它不起作用,只有在从opener调用时才起作用,但是…@epascarello在某个点上没有可用的opener窗口。在这一点上,你失去了与所述窗口的联系。