我的插件创建了一个Panel
,它显示了当前为插件选择的首选项。
我想Panel
用一个来填充button
,谁的onclick()
事件创建一个对话框,允许用户指定保存文件的目录。
这对于基于 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
可以在这里访问或替代方法吗?