我正在尝试为Firefox构建一个扩展。此扩展使用XPCOM组件( 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在error console中,我没有消息。
如果没有错误消息,我该如何调试?顺便说一下,我的javascript.options.showInConsole设置为true。
谢谢!
发布于 2012-01-30 00:48:23
根据https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0,您必须使用binary-component指令来注册二进制组件。
该页面还链接到一个示例;您只发布了注册所需的代码的一部分。
如果组件仍然不能工作,我会尝试通过Components.classescontract id从错误控制台获取它-这将显示问题是组件注册还是全局属性部分。
尽管https://developer.mozilla.org/en/Troubleshooting_XPCOM_components_registration是a bit dated,但它可能对故障排除很有用。
发布于 2015-09-05 07:53:38
也许是一个更新,因为Firefox41在发布版本中不再支持使用二进制组件进行扩展,但可以使用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: ..}]
https://stackoverflow.com/questions/9054143
复制相似问题