4

Firefox 17.0.1にアップデートした後、PrivilegeManagerはサポートされなくなりました。さまざまな情報源によると、コードからそれぞれの行を削除することはまだ可能であり、すべてが正常に機能するはずです。残念ながら、これはここでは当てはまりません。

常にエラーが発生します:TypeError:Components.classesは未定義です。Components.classesに関する変更もありますか?Mozillaコードスニペットページ(https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O)には、同じ構文が記載されています(FileUtils.jsmを使用しない場合)。

私のコード:

//netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var file = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);

file.initWithPath(filePath);
4

2 に答える 2

0

何人かのコメント投稿者が指摘しているように、コードを間違った場所で実行している可能性があります(つまり、非特権のWebページコンテキスト)。ただし、それは単にスコープの問題である可能性があります。

スコーピングの場合は、次のことを試してください。

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

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath(filePath);

間違った場所で実行している場合はrequire、エラーが発生します。

于 2013-01-20T07:27:01.997 に答える
0

最終的に問題を解決するには:当初、私はまだ古いPrivilegeManagerを使用していました。コードからこの行を削除しようとすると、うまくいきませんでした。問題は次のとおりです。私は自宅で作業していましたが、拡張機能は拡張機能として実行されていませんでしたが、怠惰なため、通常のxulファイルとしてのみ実行されていました。Boris Zbarskyとpaaがすでに上で述べたように、「chrome」特権を取得するには、拡張機能自体でコードを実行する必要があります。

その後、上記のコードを実行すると(PrivilegeManager行を削除するだけで)問題なく動作します。

于 2013-01-21T01:37:49.277 に答える