2011-12-15 101 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。

相關問題