Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№113-09-2009 01:17:44

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 3.5
Веб-сайт

XPCOM: Определить класс

Как узнать к какому классу относится интерфейс, например, nsIFile?


Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№213-09-2009 09:26:04

zibloid
Участник
 
Группа: Members
Зарегистрирован: 22-08-2009
Сообщений: 16
UA: Firefox 3.5

Re: XPCOM: Определить класс

Можно тут посмареть : http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/interfaces/
Если имеллось в виду Components.classes[""]...

Отсутствует

 

№315-09-2009 21:48:06

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 3.5
Веб-сайт

Re: XPCOM: Определить класс

Хочу получить простой, но полный список классов и компонентов.
Код примерно такой:

Выделить код

Код:

for(var Cc in Components.classes)
{
document.writeln(Cc.name +"  "+ Cc.number);
}

Но я застрял в самом... странном месте.
Как вывести текст, чтобы его потом скопировать?

"document.writeln" для XUL не существует.

Начал искать вариант и наткнулся на объект EDITOR, но так и не понял, как текст в него пихать.

Отредактировано Keepun (15-09-2009 21:59:01)


Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№416-09-2009 10:22:26

Forest
Участник
 
Группа: Members
Откуда: Обнинск
Зарегистрирован: 05-04-2005
Сообщений: 1778
UA: Firefox 3.5

Re: XPCOM: Определить класс

Keepun

Keepun пишет

Как вывести текст, чтобы его потом скопировать?

dump и включить консоль.
Ещё можно в файл писать.


---  ---

Отсутствует

 

№516-09-2009 15:04:28

Crazy-EyE
Участник
 
Группа: Members
Зарегистрирован: 20-06-2008
Сообщений: 81
UA: Firefox 3.5

Re: XPCOM: Определить класс

Можно открыть пустую вкладку (руками) и дописывать в нее:

Выделить код

Код:

win.gBrowser.contentDocument.body.innerHTML += "yourtext"

А вообще в Extension Developer есть JavaScript shell - очень удобно в таких случаях.

Отсутствует

 

№616-09-2009 20:33:18

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 3.5
Веб-сайт

Re: XPCOM: Определить класс

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

Что ему надо? Какой объект?


Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№716-09-2009 20:59:07

Crazy-EyE
Участник
 
Группа: Members
Зарегистрирован: 20-06-2008
Сообщений: 81
UA: Firefox 3.5

Re: XPCOM: Определить класс

Выделить код

Код:

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>");

Отсутствует

 

№816-09-2009 23:47:41

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 3.5
Веб-сайт

Re: XPCOM: Определить класс

Не пашет 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}

Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№917-09-2009 00:24:26

Crazy-EyE
Участник
 
Группа: Members
Зарегистрирован: 20-06-2008
Сообщений: 81
UA: Firefox 3.5

Re: XPCOM: Определить класс

Надо же еще получить сам объект:

Выделить код

Код:

Components.classes["@mozilla.org/browser/sessionstore;1"].getService(Components.interfaces.nsIClassInfo).getInterfaces({})

Причем для некоторых компонентов надо вызывать createInstance, а не getService. И похоже, большинство компонентов, написанных на С++, не поддерживают nsIClassInfo.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]