我需要能夠從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