我正在尝试为Firefox构建一个扩展。此扩展使用XPCOM组件(C++dll)。我正在编译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。
谢谢!
Perhttps://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0必须使用binary-component
指令来注册二进制组件。
该页面还链接到一个示例;您只发布了注册所需代码的一部分。
如果组件仍然不起作用,我会尝试从错误控制台通过Components.classes[contract-id]获取它,这将显示问题是组件注册还是全局属性部分。
https://developer.mozilla.org/en/Troubleshooting_XPCOM_components_registration可能对故障排除有用,尽管它有点过时。
也许是更新,因为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: ..}]