小编Jes*_*eld的帖子

如何确定扩展名的目录

我需要从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)

javascript firefox firefox-addon

5
推荐指数
1
解决办法
2540
查看次数

标签 统计

firefox ×1

firefox-addon ×1

javascript ×1