2012-09-24 65 views
3

我想使用Firefox来阅读SSH横幅。即。当您最初连接到SSH服务器时,服务器向您发送其横幅,标识服务器软件,并向SSH服务器发送您的横幅,以识别您的客户端软件。nsisocketTransportService使用Firefox插件sdk

要做到这一点我使用的例子,在这个网址:

Is there nsiClientSocket in firefox extension javascript?

这里是我的代码:

'use strict'; 

const {Cc,Ci} = require("chrome") 
const prefs = require("simple-prefs"); 


exports.main = function(options,callbacks) { 
    var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"] 
           .getService(Components.interfaces.nsISocketTransportService) 
           .createTransport(null, 0, "localhost", 22, null); 

    //var output = transport.openOutputStream(0, 0, 0); 
    var input = transport.openInputStream(0, 0, 0); 
    var data = "test"; 
    dump(stream.read()); 
    //stream.write(data, data.length); 
    //stream.close(); 
    dump("all done!"); 
}; 

当我做CFX X​​PI与我得到这个:

The following lines from file C:\path\to\lib\main.js: 
    8: var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"] 
    9: .getService(Components.interfaces.nsISocketTransportService) use 'Components' to access chrome authority. To do so, you need to add a line somewhat like the following: 

    const {Cc,Ci} = require("chrome"); 

Then you can use any shortcuts to its properties that you import from the 'chrome' module ('Cc', 'Ci', 'Cm', 'Cr', and 'Cu' for the 'classes', 'interfaces', 'manager', 'results', and 'utils' properties, respectively. And `components` for `Components` object itself). 

所以我试试这个:

'use strict'; 

const {Cc,Ci} = require("chrome") 
const prefs = require("simple-prefs"); 


exports.main = function(options,callbacks) { 
    var transport = components.classes["@mozilla.org/network/socket-transport-service;1"] 
           .getService(interfaces.nsISocketTransportService) 
           .createTransport(null, 0, "localhost", 22, null); 

    //var output = transport.openOutputStream(0, 0, 0); 
    var input = transport.openInputStream(0, 0, 0); 
    var data = "test"; 
    dump(stream.read()); 
    //stream.write(data, data.length); 
    //stream.close(); 
    dump("all done!"); 
}; 

ie。我使组件组件(小写)和Components.interfaces只是接口。但后来我在控制台上得到这个错误:

var transport = components.classes["@mozilla.org/network/socket-transport-service;1"] 
ReferenceError: components is not defined 

任何想法?

回答

13

您应该使用Cc,而不是Components.classesCi代替Components.interfaces - 这些都是你从chrome模块导入的变量,它们的定义。如果你曾经需要使用Components对象本身(不太可能),你可以导入,以及:

const {components, Cc, Ci} = require("chrome"); 

参考:chrome authority

相关问题