我需要从JavaScript获取扩展安装目录的路径.
我的目标是从Firefox扩展名写入扩展目录中的JSON文件.为此,我需要确定Firefox配置文件中安装扩展的目录.
我用这个代码:
function writeToFile()
{
var id = "plugin@uua";// 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();
Run Code Online (Sandbox Code Playgroud)
它会引发以下错误:
TypeError:Components.classes['@mozilla.org/extensions/manager;1'] is undefined.
Run Code Online (Sandbox Code Playgroud)
我基本上需要从JavaScript自动获取扩展的路径. 我仔细检查了我的扩展程序的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; …Run Code Online (Sandbox Code Playgroud)