2012-07-27 51 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