JavaScriptから拡張機能インストールされたディレクトリのパスを取得する必要があります。拡張機能のディレクトリを特定する方法
私の目標は、Firefoxの拡張機能から拡張ディレクトリ内のJSONファイルに書き込むことです。そのためには、Firefoxプロファイル内に拡張機能がインストールされているディレクトリを特定する必要があります。私は基本的に、JavaScriptから自動的に拡張のパスを取得する必要があります
TypeError:Components.classes['@mozilla.org/extensions/manager;1'] is undefined.
:それは次のようなエラーがスローされます
function writeToFile()
{
var id = "[email protected]";// The extension's id from install.rdf(i.e. <em:id>)
var ext = Components.classes["@mozilla.org/extensions/manager;1"]
.getService(Components.interfaces.nsIExtensionManager)
.getInstallLocation(id)
.getItemLocation(id);
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(ext.path);
file.append("config.json");
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
var data = '[ {"id" : "2"} ]';
foStream.write(data, data.length);
foStream.close();
:
私はこのコードを使用します。 私は自分の内線番号のIDを二度チェックしましたが、運がない他の内線番号からのファイルへの書き込みも試みました。
返信いただきありがとうございます。とにかく私の問題を即座に解決することはできませんでしたが、それは私にMozillaのドキュメントを読ませなくてはなりませんでした。私はついにそれがどのように働くのか分かりました。再度、感謝します。上記の質問へ
ソリューション:
Components.utils.import("resource://gre/modules/AddonManager.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");
AddonManager.getAddonByID("plugin_id", function(addon) {
var uri = addon.getResourceURI("config.json");
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
var stringUri = uri.asciiSpec;
stringUri = stringUri.replace(new RegExp(/\//g), '\\');
stringUri = stringUri.slice(8);
alert(stringUri);
file.initWithPath(stringUri);
alert(addon.hasResource("config.json"));
var stream = FileUtils.openFileOutputStream(file,
FileUtils.MODE_WRONLY
| FileUtils.MODE_CREATE
| FileUtils.MODE_TRUNCATE);
stream.write(dataToWrite, dataToWrite.length);
stream.close();
は、私はあなたの拡張機能は、それがインストールディレクトリですにファイルを書き込むために展開されていることを確認する必要がありますだと思います。 – erikvold
ですので、代わりにユーザーのプロファイルディレクトリにファイルを保存することをお勧めします。 – erikvold