4

更新到 Firefox 17.0.1 后,不再支持 PrivilegeManager。各种消息来源说,仍然可以简单地从代码中删除相应的行,一切都应该正常工作。不幸的是,这里不是这种情况。

我总是得到一个错误:TypeError: Components.classes is undefined。Components.classes 也有变化吗?Mozilla 代码片段页面 (https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O) 声明了相同的语法(不使用 FileUtils.jsm)。

我的代码:

//netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var file = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);

file.initWithPath(filePath);
4

2 回答 2

0

正如一些评论者所指出的,您可能在错误的位置运行代码(即:非特权的网页上下文)。然而,它可能只是范围界定的问题。

如果是范围,试试这个:

const {Cc,Ci,Cu} = require("chrome");

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath(filePath);

如果你在错误的地方运行,require会产生错误。

于 2013-01-20T07:27:01.997 回答
0

最终解决我的问题:最初我仍在使用过时的权限管理器。当我试图从我的代码中简单地删除这一行时,它对我不起作用。问题是:我在家里工作,扩展程序不是作为扩展程序运行的,而是-出于懒惰-仅作为常规 xul 文件运行。正如 Boris Zbarsky 和 ​​paa 上面已经提到的,您必须在扩展本身中运行代码才能获得“chrome”权限。

之后,运行上述代码(只需删除 PrivilegeManager 行)就可以了!

于 2013-01-21T01:37:49.277 回答