【问题标题】:Using nsIFilePicker.modeGetFolder within addon sdk在插件 sdk 中使用 nsIFilePicker.modeGetFolder
【发布时间】:2013-10-15 05:04:08
【问题描述】:

我的插件创建了一个Panel,它显示了当前为插件选择的首选项。
我想用button 填充Panelonclick() 事件会创建一个对话框,允许用户指定保存文件的目录。
这在基于 XUL 的插件中是可能的,但相同的代码在基于 sdk 的插件中不起作用,因为 window 不可访问。
有什么办法解决这个问题吗?

在插件代码中,我使用以下方法创建Panel

var confirmDialog = require("sdk/panel").Panel({
    width: 250,
    height: 250,
    contentURL: data.url("confirmDialog.html"),
});

confirmDialog.port.on("selectDir", function () {
    chromeManager.selectDir();
});

confirmDialog.html 指定Panel 的内容:

<div id="pathToFile"></div>
<button onclick="Panel.selectDir();">
</button>

confirmDialog.js 向插件代码发送消息:

var Panel = {

    selectDir: function() {
        addon.port.emit("selectDir", '');
    }
};

chromeManager.js 是插件代码的一部分,因此它可以访问 sdk API。

exports.selectDir = function() {

    var nsIFilePicker = Ci.nsIFilePicker, 
    fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);

    fp.init(window, nsIFilePicker.modeGetFolder);

    var ret = fp.show();

    if (ret == nsIFilePicker.returnOK || ret == nsIFilePicker.returnReplace) {
        document.getElementById('pathToFile').value = fp.file.path;
    }
}

但是在运行此代码时我得到了ReferenceError: window is not defined,有没有办法让window 可以在此处访问,或者有其他方法可以做到这一点?

【问题讨论】:

    标签: javascript firefox-addon firefox-addon-sdk


    【解决方案1】:

    您可以使用window/utils,尤其是getMostRecentBrowserWindow(),获取对活动窗口的引用,以便与nsIFilePicker API 一起使用。

    【讨论】:

    • fp.init(require("sdk/window/utils").getMostRecentBrowserWindow(), "Select", nsIFilePicker.modeGetFolder) 成功了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多