нет доступа к компонентам XPCOM

Я прорабатываю учебник 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 is undefined.». В других местах говорят, что это может быть проблема с другими надстройками, которые проблематичны, поэтому я перезапустил Firefox в безопасном режиме, но у меня все еще есть эта проблема.

Другие вопросы здесь кажутся похожими на эти, в которых говорится, что компоненты должны быть зарегистрированы в файле манифеста; однако, похоже, это относится к компонентам, добавленным пользователем. Так ли это здесь? Что я делаю неправильно?

изменить: у меня установлен XPCOMViewer, и я вижу, что компоненты есть. Когда я использую XPCOMViewer для генерации JavaScript для доступа к компоненту, он дает то же самое, что я публикую выше. Что, черт возьми, здесь происходит?


person basil    schedule 01.10.2012    source источник
comment
Вам нужно require('chrome')?   -  person David-SkyMesh    schedule 05.10.2012
comment
Мой привилегированный код обычно начинается с const {Cc,Ci,Cu} = require("chrome");   -  person David-SkyMesh    schedule 05.10.2012


Ответы (1)


Попробуй это:

const {Cc,Ci,Cu} = require("chrome");
var cmgr = Cc["@mozilla.org/cookiemanager;1"].getService();
cmgr = cmgr.QueryInterface(Ci.nsICookieManager);
person David-SkyMesh    schedule 05.10.2012
comment
Думаю, есть 3 разных прицела. Либо Components (и др.) Уже определены, либо вы можете сделать require(...), либо вы используете непривилегированный код, который вообще не может использовать интерфейсы. - person David-SkyMesh; 25.03.2013
comment
Спасибо, Дэвид, я разобрался. - person Minh Pham; 25.03.2013
comment
@MinhPham, не могли бы вы поделиться своим решением? - person Madhavan Malolan; 19.02.2014