我需要能够从Firefox中的活动选项卡获取URL。 DDE不适用于多个实例,所以我想我可以创建一个设置全局原子或其他东西的插件。什么是与Firefox插件进行通信的最佳方式
我也认为也许我可以使用剪贴板,但我不想覆盖任何现有的文本和自定义剪贴板类型似乎不被支持。
我不想诉诸写一个文件来做简单的IPC ......所以在我做之前......对于如此简单的事情,有更好的选择。
感谢
我需要能够从Firefox中的活动选项卡获取URL。 DDE不适用于多个实例,所以我想我可以创建一个设置全局原子或其他东西的插件。什么是与Firefox插件进行通信的最佳方式
我也认为也许我可以使用剪贴板,但我不想覆盖任何现有的文本和自定义剪贴板类型似乎不被支持。
我不想诉诸写一个文件来做简单的IPC ......所以在我做之前......对于如此简单的事情,有更好的选择。
感谢
从应用到一个Firefox连通附加的通常方法是通过TCP套接字。您创建了一个nsIServerSocket实例,在其上调用init()
,然后asyncListen()
。当应用程序连接到您的套接字时,您的侦听器的方法onSocketAccepted被调用,并且您可以获得一个nsITransport实例,您可以从中读取数据或写入数据(使用NetUtil.jsm以异步方式从输入流中读取数据)。
对于相对简单的示例实现,请参阅mozSocket.jsm(不使用NetUtils.jsm
来读取数据)。
我不知道它是否是最好的方法,但我认为使用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脚本来获取当前操作选项卡的url。
require 'net/telnet'
t = Net::Telnet.new('Port' => 4242)
t.waitfor(/repl.*>/)
puts eval(t.cmd("content.location.href").split[0])
t.close
我不知道这是否已经在Firefox中实现又或者如果它仍然在构思阶段: Mozilla Notifications API。
Google拥有适用于Chrome扩展程序的GCM。
您可以做一些非常愚蠢的事情,比如每次更改文件时将当前URL写入文件,并从另一个进程读取该文件。 – 2011-12-15 19:35:44
您可以在此页面上找到解决方案:http://stackoverflow.com/questions/11582607/find-url-of-current-tab-making-a-firefox-browser-add-on – 2012-10-10 12:53:52