Страницы: 1
Хочу получить простой, но полный список классов и компонентов.
Код примерно такой:
Но я застрял в самом... странном месте.
Как вывести текст, чтобы его потом скопировать?
"document.writeln" для XUL не существует.
Начал искать вариант и наткнулся на объект EDITOR, но так и не понял, как текст в него пихать.
Отредактировано Keepun (15-09-2009 21:59:01)
Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?
Отсутствует
Можно открыть пустую вкладку (руками) и дописывать в нее:
А вообще в Extension Developer есть JavaScript shell - очень удобно в таких случаях.
Отсутствует
OK, c Javascript Shell разобрался...
Такой код:
var CInf = Components.classes['@mozilla.org/timer;1'].QueryInterface(Components.interfaces.nsIClassInfo); var CiC, CiR; CInf.getInterfaces(CiC, CiR); document.writeln("+++ "+ CiC +"<br>");
Ошибка:
NS_ERROR_XPC_NEED_OUT_OBJECT on line 3: 'Out' argument must be an object arg 0 [nsIClassInfo.getInterfaces
Что ему надо? Какой объект?
Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?
Отсутствует
void getInterfaces(out PRUint32 count, [array, size_is(count), retval] out nsIIDPtr array);
Второй параметр out+retval, т.е. из JavaScript он будет виден не как второй параметр функции, а как её возвращаемое значение.
Чтобы получить первый out-параметр, надо передать этой функции объект, и она заполнит в нем поле value в данном случае размером массива (иммитация передачи по ссылке, используемая XPConnect при вызове методов XPCOM-интерфейса из JavaScript). Но в JavaScript не нужно отдельно знать размер массива - он будет в CiR.length автоматически (XPConnect всё сделает сам), поэтому передаем пустой анонимный объект.
var CInf = Components.classes['@mozilla.org/timer;1'].QueryInterface(Components.interfaces.nsIClassInfo); var CiR = CInf.getInterfaces({}); document.writeln("+++ "+ CiC +"<br>");
Отсутствует
Не пашет CInf.getInterfaces({})... одно и тоже выдает
var CInf = Components.classes['@mozilla.org/file/local;1'].QueryInterface(Components.interfaces.nsIClassInfo); for each(var Cc in CInf.getInterfaces({})) document.writeln("+++ "+ Components.interfacesByID[Cc].name +" ::: "+ Cc +"<br>");
Независимо от класса получу:
+++ nsIJSID ::: {baedc96a-9cee-4b6b-9160-90d257b3c8ef} +++ nsIJSCID ::: {26b2a374-6eaf-46d4-acaf-1c6be152d36b}
Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?
Отсутствует
Надо же еще получить сам объект:
Components.classes["@mozilla.org/browser/sessionstore;1"].getService(Components.interfaces.nsIClassInfo).getInterfaces({})
Причем для некоторых компонентов надо вызывать createInstance, а не getService. И похоже, большинство компонентов, написанных на С++, не поддерживают nsIClassInfo.
Отсутствует
Страницы: 1