2011-12-15 104 views
1

我需要能够从Firefox中的活动选项卡获取URL。 DDE不适用于多个实例,所以我想我可以创建一个设置全局原子或其他东西的插件。什么是与Firefox插件进行通信的最佳方式

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

我不想诉诸写一个文件来做简单的IPC ......所以在我做之前......对于如此简单的事情,有更好的选择。

感谢

+0

您可以做一些非常愚蠢的事情,比如每次更改文件时将当前URL写入文件,并从另一个进程读取该文件。 – 2011-12-15 19:35:44

+0

您可以在此页面上找到解决方案:http://stackoverflow.com/questions/11582607/find-url-of-current-tab-making-a-firefox-browser-add-on – 2012-10-10 12:53:52

回答

2

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

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

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脚本来获取当前操作选项卡的url。

require 'net/telnet' 

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

我不知道这是否已经在Firefox中实现又或者如果它仍然在构思阶段: Mozilla Notifications API

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

相关问题