1

ウィジェットのクリックに基づいて、nslProcess を使用して舞台裏でいくつかの osascript コマンドを実行するアドオンを作成しようとしています。ここで次のアドオン レベルのコードを見つけましたが、動作させることができませんでした。

player.port.on("star1", function() {

//var args = ['-e','tell application "iTunes"','-e','"stop"','-e','"end tell"' ];

var cmd = '/usr/bin/say';
var args = ['value', 'test'];

var execFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);

execFile.initWithPath(cmd);

    if (execFile.exists()) {
        process.init(execFile);
        process.run(true, args, args.length);
    }


});

私は Firefox 25 を使用しています。

4

1 に答える 1

0

はい、可能です。chromeモジュール経由ですべての XPCOM にアクセスできます。

ここに完全な例があります ( main.js)

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

var cmd = '/usr/bin/say';
var args = ['value', 'test'];

var execFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);

execFile.initWithPath(cmd);

if (execFile.exists()) {
    process.init(execFile);
    process.run(true, args, args.length);
}

ただし、いくつかの注意事項がありnsIProcessます。

  • 常に絶対パスを指定する必要があります。
  • OSX アプリ バンドルを直接実行することはできません。open(1)バンドル内の実際の実行可能ファイルを調べるか実行します。
  • nsIProcess正確にはきびきびしていません。プロセスが終了するのを待つため、UI を少し ( runAsync) と でさらにブロックします。runしたがって、可能な限り優先runAsyncして、この API を控えめに使用してください。
于 2013-11-06T03:23:06.887 に答える