【问题标题】:Interprocess communication between browser extension and native application浏览器扩展和本机应用程序之间的进程间通信
【发布时间】:2014-06-08 21:26:52
【问题描述】:

如何在浏览器扩展程序和本机应用程序之间建立进程间通信?是否有任何跨平台(Linux 和 Mac OS X)和跨浏览器的解决方案(Firefox、Chrome、Safari)?

我想到的唯一想法是使用原生 Web 技术,即在原生应用程序中嵌入 HTTP 服务器并使用 XmlHttpRequest 或 WebSockets。但是,这听起来有点笨拙,带有一些问题(例如安全性)。有没有更好的选择?

【问题讨论】:

  • 跨浏览器?可能不是。浏览器旨在与 Web 服务器通信,您想要的跨浏览器解决方案越多,您获得额外功能的机会就越少。
  • 实际上,前段时间 NPAPI 可能是一种方式,但至少在 Chrome 中它已完全弃用扩展程序。
  • 跨浏览器是指允许我拥有一个“协议”和一个“服务器”组件的解决方案,即使“浏览器端”实现会有所不同。
  • NPAPI 在 Firefox 中也被弃用(嗯,有点)。 addons.mozilla.org 很久以来不接受提交 NPAPI 插件或包含此类插件的附加组件。

标签: google-chrome-extension firefox-addon ipc safari-extension browser-extension


【解决方案1】:

我相信最常用的方法是 websocket 连接。我能想到的两个例子是1Password 和 LiveReload (source code available)。

据我所知,您需要从全局页面中打开 websocket 连接以避免跨域限制。

此外,过去我曾看到其他应用监视和修改扩展程序的设置文件。扩展程序只是从它自己的设置存储中读取和写入,而其他进程则监视首选项文件以进行更改。我认为这不太可靠并且不符合 Mac App Store 的沙盒要求,因此我会推荐 websockets 方法。

【讨论】:

  • 是否可以通过 AF_UNIX 套接字而不是 TCP 运行 WebSockets?
  • AF_UNIX 将排除 Windows(但您似乎只在 Linux 和 OSX 之后)......但是,您 cannot even use raw TCP in chrome extensions,只有 HTTP/XHR 和 WebSockets(在某种程度上)。不过,您can use domain sockets in Firefox 相对轻松。
  • 不需要使用原始套接字。构建指向 unix 域套接字而不是 HTTP 主机的 WebSocket URI 就可以了。
  • @el.pescado:为什么需要 Unix 域套接字?为什么 TCP 环回作为传输“不够好”?
  • @oberstet:Unix 域套接字“活”在文件系统上,wchich 很方便,因为 1)套接字可以“放置”在多用户系统中用户的主目录中,2)文件系统权限被强制执行
猜你喜欢
  • 2014-06-25
  • 1970-01-01
  • 2013-12-04
  • 2013-04-07
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多