浏览器扩展和本机应用程序之间的进程间通信

问题描述 投票:0回答:2

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

我想到的唯一想法是使用本机 Web 技术,即在本机应用程序中嵌入 HTTP 服务器并使用 XmlHttpRequest 或 WebSockets。然而,这听起来像是笨重的矫枉过正,存在一些问题(例如安全性)。有更好的选择吗?

google-chrome-extension firefox-addon ipc safari-extension browser-extension
2个回答
12
投票

我认为最常用的方法是 websocket 连接。我能想到的两个例子是 1Password 和 LiveReload(源代码可用)。

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

此外,过去我见过其他应用程序监视和修改扩展程序的设置文件。该扩展程序仅从其自己的设置存储中读取和写入,而其他进程则监视首选项文件的更改。我认为这不太可靠,并且不符合 Mac App Store 的沙箱要求,因此我建议使用 websockets 方法。


0
投票

由于这是与此相关的投票率较高的问题之一,我将在这里指出,这个问题和接受的答案是在 Mozilla 放弃 XPI/XUL 扩展仅使用 WebExtensions 之前(大约 2017 年)。

对于现代浏览器,使用“本机消息传递”,它通过 stdin 发送 JSON + UTF-8 编码消息,并带有消息长度前缀。 FF 和 Chrome 之间仅存在一些明显和位置差异。有无连接消息传递和基于连接的消息传递。

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging

https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging

© www.soinside.com 2019 - 2024. All rights reserved.