2012-07-27 82 views

回答

1

你必須使用nsISocketTransportService.createTransport()打開一個連接,這樣的:

var Cc = Components.classes; 
var Ci = Components.interfaces; 

var socket = Cc["@mozilla.org/network/socket-transport-service;1"] 
       .getService(Ci.nsISocketTransportService) 
       .createTransport(["ssl"], 1, "pop.gmail.com", 995, null); 

var input = socket.openInputStream(Ci.nsITransport.OPEN_UNBUFFERED, 0, 0); 
var scriptableInput = Cc["@mozilla.org/scriptableinputstream;1"] 
         .createInstance(Ci.nsIScriptableInputStream); 
scriptableInput.init(input); 


var output = socket.openOutputStream(Ci.nsITransport.OPEN_UNBUFFERED, 0, 0); 

這可以讓你的輸入和輸出流。您可以通過nsIScriptableInputStream.read()接收數據並通過nsIOutputStream.write()發送。但是你仍然必須自己實現IMAP/SMTP邏輯(你不能在Thunderbird中用C++編寫當前的實現,而新的基於JavaScript的實現還沒有準備好)。

+0

很棒。感謝這 – enthdegree 2012-08-02 02:03:00

+0

您好弗拉基米爾,你能告訴我是否有可能從Firefox擴展中執行正常的Ajax查詢。對於來自foo.com網站的網頁來說,當Ajax url被指定爲test.php時,請求會發送到foo.com/test.php,它可以發送適當的結果。我如何在Firefox擴展中使用它,因爲它本身沒有網站?我必須通過JSONP來完成嗎? – SexyBeast 2014-06-25 10:28:23

+0

@Cupidvogel:如何創建一個新問題而不是在一個完全不相關的問題上發表評論?或者只是搜索,現在有很多關於這個問題的問題。 – 2014-06-25 11:23:28

0

https://bugzilla.mozilla.org/show_bug.cgi?id=733573是爲web應用程序實現一個TCP API;這是一項正在進行的工作,最多隻能在Firefox 17中使用。但是,如果您閱讀了補丁(https://bugzilla.mozilla.org/attachment.cgi?id=643432&action=diff#a/b2g/components/TCPSocket.js_sec1),則TCPSocket對象幾乎公開了將SSL連接到任意服務器所需的一切,因此您應該能夠竊取此代碼!

+0

問題是關於擴展,而不是Web應用程序。擴展已經可以訪問套接字API,這不是什麼新東西。 – 2012-07-30 09:36:11

+0

當然,但是該補丁包含了一個很好的示例,說明如何使用chrome代碼中的套接字api,並且被問到的人可能能夠在那裏竊取抽象,因爲他要求一種優雅的方式。 – 2012-07-30 09:43:17