我的插件创建了一个触发回调函数“launchApp”的 FireFox 文件菜单命令。
function launchApp() {
var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"]
.getService(Components.interfaces.nsIWindowWatcher);
var appUrl='chrome://mrT2/mrT00.xul'; // production (fails)
var appUrl='file:///C:/mpa/@@mrT-2.0/mrT00.xul'; // testing (works)
var win = ww.openWindow(null, appUrl, "mrT2-window", "chrome,resizable", null);
// Summary of results of ww.openWindow() for various appUrl values:
// 'chrome:///mrT2/mrT00.xul' 'No chrome package registered for ...' (true)
// 'chrome://mrT00.xul' 'Invalid chrome URI: /' (true)
// 'chrome:///mrT00.xul' and 'chrome://mrT2/mrT00.xul' seem valid yet both give:
//Error: NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 ...
// ... (NS_ERROR_ILLEGAL_VALUE) [nsIWindowWatcher.openWindow] (unexplained)
return true;
上面的代码运行良好,非常适合测试 mrT00.xul(因为它直接从我编辑它的位置收集文件)。
但是,当我交换两个 appUrl 变量以尝试打开与通过 xpi 发送的完全相同的文件(现在是 Firefox 内部)时,我得到了可怕的“非法值”0x80070057。
经过 2 天漫长的研究和学习,我的代码无法出错。你可以吗?
否则,我如何开始跟踪 nsiWindowWatcher 以查明错误?