【问题标题】:js communicate between popup to main windowjs在弹出窗口和主窗口之间进行通信
【发布时间】:2023-03-10 08:15:01
【问题描述】:

我在同一个域上有两个浏览器窗口,

一个是主窗口,第二个是小弹出窗口。

我发现了这个:How to Communicate between two browser windows?

但是,问题是弹出窗口通过第三方软件在本地计算机上作为事件打开... 而且我不希望与服务器通信,并在主窗口中读取状态,以解决慢速问题..

我希望通过 JS 将弹出窗口中的一些数据直接传输到主窗口(然后立即关闭弹出窗口)。

该事件是本地电话软拨号器带参数打开的VOIP新来电,主窗口是浏览器CRM,需要在同一页面上通过JS显示来电状态,类似AJAX [仅限本地].

ps:

也许有一种方法可以在浏览器与 windows 应用程序之间进行通信?所以第 3 方软件将向它发送数据,应用程序将与窗口通信 (或 Firefox 扩展 - 但我更喜欢不需要安装更多插件)...

我应该采取什么方法?您认为解决方案是什么?

感谢分配。 ;)

【问题讨论】:

  • 我想我会使用 dailer->bridge application->addon[via socket]->js 通信....拨号器将执行命令而不是弹出,执行并将参数发送到本地我将编写的应用程序,它通过套接字与本地主机通信与 firefox 插件通信,并使用参数调用 alocal js...复杂但快速且干净。

标签: javascript popup window communicate


【解决方案1】:

如果一个浏览器没有打开另一个浏览器,这两个浏览器就无法通过window.opener进行对话。

您可以尝试将数据存储到localstorage 并让 Windows 轮询本地存储以进行更改。

【讨论】:

  • 我可以使用 c++ windows 应用程序操作本地存储来进行 firefox 插件通信吗?避免打开和关闭迷你弹出窗口...thanx
  • 或 90 年代的老把戏.. window.name 因为 localStorage 可能不可用。但是你必须使用一个间隔来“倾听”变化并对其采取行动..suck.
  • 另外,建议使用localstorage 仅适用于同域。所以你不能使用 storage 监听器,除非你从同一个域打开 2 个单独的窗口。
  • 如果使用locaStorage,您不需要轮询更改,而是添加一个事件侦听器window.on('storage'),它将在除设置值的窗口之外的所有窗口中触发。跨度>
【解决方案2】:

您是否尝试过使用window.opener 来引用父窗口?

【讨论】:

  • 不,我会尝试,window.opener 将返回窗口的父级,但有趣的是知道它是否有父级,因为第 3 方软件打开了它.. 不是“父级”我寻找..,这有点像 2 个独立的浏览器窗口通信...
  • 对,好吧,因为我不知道第三方软件是如何打开窗口的(可以在主浏览器窗口范围内执行命令),所以值得一说;)
猜你喜欢
  • 1970-01-01
  • 2013-10-21
  • 2012-11-19
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多