再起動のないアドオンで nsICommandLineHandler を実装する方法はありますか?
https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/platform/xpcom.htmlから可能と思われますが、このコード (exports.main 内から実行) は機能していません私のため:
var { Class } = require('sdk/core/heritage');
var { Unknown, Factory } = require('sdk/platform/xpcom');
var { Cc, Ci } = require('chrome');
var contractId = '@mozilla.org/commandlinehandler/general-startup;1?type=webappfind';
// Define a component
var CommandLineHandler = Class({
extends: Unknown,
get wrappedJSObject() this,
classDescription: "webAppFinder",
/* Not used by SDK, so commenting out
_xpcom_categories: [{
category: "command-line-handler",
// category names are sorted alphabetically. Typical command-line handlers use a
// category that begins with the letter "m".
entry: "m-webappfind"
}],
*/
helpInfo : " -webappfind Open My Application\n",
// nsICommandLineHandler
handle : function clh_handle(cmdLine) {
try {
console.log('good so far'); // Doesn't actually reach here
var fileStr = cmdLine.handleFlagWithParam("webappfind", false);
if (fileStr) {
console.log('made it');
}
}
catch (e) {
Cu.reportError("incorrect parameter passed to -webappfind on the command line.");
}
if (cmdLine.handleFlag("webappfind", false)) { // no argument
cmdLine.preventDefault = true;
throw 'A valid ID must be provided to webappfind';
}
},
hello: function() {return 'Hello World';}
});
// Create and register the factory
var factory = Factory({
contract: contractId,
// id: '{7f397cba-7a9a-4a05-9ca7-a5b8d7438c6c}', // Despite the docs saying one can add both, this doesn't work
Component: CommandLineHandler
});
その後、次のコードが機能します...
// XPCOM clients can retrieve and use this new
// component in the normal way
var wrapper = Cc[contractId].createInstance(Ci.nsISupports);
var helloWorld = wrapper.wrappedJSObject;
console.log(helloWorld.hello());
...しかし、Firefox は次のエラーのようにコマンド ライン引数を受け入れません。
エラー: 警告: 認識されないコマンド ライン フラグ -webappfind
ソースファイル: resource://app/components/nsBrowserContentHandler.js 行: 765
アップデート
@nmaier のアドバイスに従ってカテゴリを追加したため、後で次の行を追加しました。
var catMan = Cc['@mozilla.org/categorymanager;1'].getService(Ci.nsICategoryManager); //
catMan.addCategoryEntry('command-line-handler', 'm-webappfind' /*contractId*/, contractId, false, true);
しかし、コマンドラインから呼び出すと、次の 3 つのエラーが発生します。
エラー: [例外...「メソッド呼び出し時の「失敗」: [nsIFactory::createInstance]」nsresult:「0x80004005 (NS_ERROR_FAILURE)」場所:「ネイティブ フレーム :: :: :: 行 0」データ: no]
コントラクト ID '@mozilla.org/commandlinehandler/general-startup;1?type=webappfind' はエントリ 'm-webappfind' のコマンド ライン ハンドラとして登録されましたが、作成できませんでした。
エラー: 警告: 認識されないコマンド ライン フラグ -webappfind
ソースファイル: resource://app/components/nsBrowserContentHandler.js 行: 765