Mozilla XPCOM не зарегистрирован - PullRequest
1 голос
/ 29 января 2012

Я пытаюсь создать расширение для Firefox. Это расширение использует компонент XPCOM (DLL C ++). Я компилирую DLL, компиляция в порядке.

Следующим шагом будет использование компонента в Javascript из моего расширения. Я добавил код для регистрации моего компонента из моего файла c ++:

static const mozilla::Module::CategoryEntry kSampleCategories[] = {
    { JAVASCRIPT_GLOBAL_PROPERTY_CATEGORY, "greenfox", NS_SAMPLE_CONTRACTID },
};

В своем манифесте я объявляю XPCOM:

component {03A6D0B4-22B9-11DF-B844-20D556D89593} components/GreenCodeLabFox.dll

Проблема в том, что при попытке использовать компонент в JS кажется, что он не зарегистрирован:

    try {
        greenfox;
        return true;
    } catch( e ) {
        alert( e );
        return false;
    }   

Это дает мне сообщение об ошибке:

ReferenceError: greenfox is not defined

В консоли ошибок у меня нет сообщения.

Как бы я отладил это, если у меня нет сообщения об ошибке? Кстати, мой javascript.options.showInConsole установлен в true.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Per https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0 Вы должны использовать директиву binary-component для регистрации двоичного компонента.

Эта страница также ссылается на пример; Вы разместили только часть кода, необходимую для регистрации.

Если компонент все еще не работает, я попытался бы получить его через Components.classes [ идентификатор контракта ] из консоли ошибок - это покажет, если проблема связана с регистрацией компонента или только с частью глобального свойства.

https://developer.mozilla.org/en/Troubleshooting_XPCOM_components_registration может быть полезно для устранения неполадок, хотя он немного устарел .

1 голос
/ 05 сентября 2015

Возможно обновление, поскольку Firefox 41, использующий бинарный компонент для расширений, больше не поддерживается в сборках выпуска, но может быть доступен для пользовательских сборок, использующих MOZ_BINARY_EXTENSIONS

https://blog.mozilla.org/addons/2015/05/04/dropping-support-for-binary-components/

https://github.com/mozilla/gecko-dev/blob/master/xpcom/components/ManifestParser.cpp

Вы можете увидеть такие ошибки, как
[JavaScript Warning: "Only application manifests may use the 'binary-component' directive." {file: "..." line: ..}]

...