与 Firefox 插件通信的最佳方式是啥

Posted

技术标签:

【中文标题】与 Firefox 插件通信的最佳方式是啥【英文标题】:What's the best way to communicate with a Firefox addon与 Firefox 插件通信的最佳方式是什么 【发布时间】:2011-12-15 19:19:37 【问题描述】:

我需要能够从 Firefox 的活动选项卡中获取 URL。 DDE 不适用于多个实例,所以我想我可以构建一个插件来设置全局原子或其他东西。

我还想也许我可以使用剪贴板,但我不想覆盖任何现有的文本,而且似乎不支持自定义剪贴板类型。

我不想仅仅为了简单的 IPC 而写文件……所以在我这样做之前……对于这么简单的事情有没有更好的选择。

谢谢

【问题讨论】:

您可以做一些非常愚蠢的事情,例如每次更改文件时将当前 URL 写入文件并从其他进程读取该文件。 您可以在此页面找到解决方案:***.com/questions/11582607/… 【参考方案1】:

从应用程序到 Firefox 插件的常用通信方式是通过 TCP 套接字。您创建一个nsIServerSocket 实例,在其上调用init(),然后调用asyncListen()。当应用程序连接到您的套接字时,您的侦听器的 onSocketAccepted 方法被调用,您将获得一个 nsITransport 实例,您可以从中读取或写入数据(使用 NetUtil.jsm 从输入流中异步读取)。

对于一个相对简单的示例实现,请参阅mozSocket.jsm(不使用NetUtils.jsm 读取数据)。

【讨论】:

使用 TCP 套接字来获取当前活动选项卡的 URL 听起来有点矫枉过正。由于我不是 Java 或 Firefox 人,看来我将不得不“破解”并将 URL 写入文件或其他丑陋的东西。【参考方案2】:

我不知道这是否是最好的方法,但我认为使用 MozRepl 会对您有所帮助。 MozRepl 将使您能够通过 telnet 与 firefox 进行交互。

% telnet localhost 4242
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Welcome to MozRepl.

repl> content.location.href
"http://***.com/questions/8525428/whats-the-best-way-to-communicate-with-a-firefox-addon"
repl> 

安装 MozRepl 后,您可以使用这个 ruby​​ 小脚本来获取当前打开的标签页的 url。

require 'net/telnet'

t = Net::Telnet.new('Port' => 4242)
t.waitfor(/repl.*>/)
puts eval(t.cmd("content.location.href").split[0])
t.close

【讨论】:

【参考方案3】:

我想知道这是否已经在 Firefox 中实现了,或者它是否仍处于构思阶段: Mozilla Notifications API.

Google 为 Chrome 扩展提供了 GCM。

【讨论】:

以上是关于与 Firefox 插件通信的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

Apple Watch 与 iPhone 通信的最佳方式是啥? [关闭]

Python 脚本与将内容传输到客户端的 Python Flask 服务器通信的最佳方式是啥?

通过 RESTful-Http 与 iPhone 应用程序中的 Web 服务进行通信的最佳方式是啥

在 django 中与应用程序服务器/网络服务器进行通信的最佳方式是啥[关闭]

同一台机器上的两个程序相互通信的最佳方式是啥

在 .NET 中,同一台机器上的两个进程进行通信的最佳方式是啥?