与Firefox插件进行通信的最佳方式是什么?

时间:2011-12-15 19:19:38

标签: firefox firefox-addon xul

我需要能够从Firefox的活动标签中获取网址。 DDE不适用于多个实例,因此我认为我可以构建一个设置全局原子的插件。

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

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

感谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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://stackoverflow.com/questions/8525428/whats-the-best-way-to-communicate-with-a-firefox-addon"
repl> 

安装MozRepl之后,您可以使用这个小ruby脚本来获取当前opend选项卡的URL。

require 'net/telnet'

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

答案 2 :(得分:1)

我想知道这是否已在Firefox中实现,或者它是否还处于创意阶段: Mozilla Notifications API

Google拥有适用于Chrome扩展程序的GCM。