无法访问任何XPCOM组件。

3

我正在学习XUL School的XPCOM入门教程。我在访问组件时遇到了麻烦。无论我尝试访问哪个组件,例如(来自MDN):

// xpconnect to cookiemanager
// get the cookie manager component in JavaScript
var cmgr = Components.classes["@mozilla.org/cookiemanager;1"].getService();
cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);

我一直遇到“TypeError: Components.classes未定义”的错误。其他地方说这可能是其他附加组件出现问题的原因,所以我在安全模式下重新启动了Firefox,但仍然遇到了这个问题。
这里的其他问题似乎与此类似,指出需要在清单文件中注册组件; 然而,这些似乎是针对用户添加的组件的。这种情况是否也适用于此处?我做错了什么?
编辑:我已经安装了XPCOMViewer,我可以看到组件都在那里。当我使用XPCOMViewer生成访问组件的JavaScript时,它提供了与我上面发布的完全相同的内容。这到底是怎么回事?

你需要 require('chrome') 吗? - David-SkyMesh
我的特权代码通常以 const {Cc,Ci,Cu} = require("chrome"); 开始。 - David-SkyMesh
1个回答

1

试试这个:

const {Cc,Ci,Cu} = require("chrome");
var cmgr = Cc["@mozilla.org/cookiemanager;1"].getService();
cmgr = cmgr.QueryInterface(Ci.nsICookieManager);

1
我认为有三种不同的作用域。要么Components(等等)已经被定义,要么你可以使用require(...),要么你处于无权使用接口的非特权代码中。 - David-SkyMesh
谢谢David,我已经弄明白了。 - Minh Pham
2
@MinhPham,你能分享一下你的解决方案吗? - Madhavan Malolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接