nsISocketTransportService使用Firefox插件sdk

neu*_*ert 3 javascript firefox firefox-addon

我正在尝试使用Firefox来阅读SSH横幅.即.当您最初连接到SSH服务器时,服务器会向您发送其横幅,标识服务器软件,然后向您的SSH服务器发送横幅,标识您的客户端软件.

为此,我在此URL使用示例:

firefox扩展javascript中有nsiClientSocket吗?

这是我的代码:

'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!");
};
Run Code Online (Sandbox Code Playgroud)

当我使用cfx xpi时,我得到了这个:

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).
Run Code Online (Sandbox Code Playgroud)

所以我试着这样做:

'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!");
};
Run Code Online (Sandbox Code Playgroud)

即.我使用Components组件(小写)和Components.interfaces只是接口.但后来我在控制台上出现了这个错误:

    var transport = components.classes["@mozilla.org/network/socket-transport-service;1"]
ReferenceError: components is not defined
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Wla*_*ant 13

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

const {components, Cc, Ci} = require("chrome");
Run Code Online (Sandbox Code Playgroud)

供参考:chrome权限