我正在尝试为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。
谢谢!
答案 0 :(得分:2)
每https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0您必须使用binary-component
指令注册二进制组件。
该页面也链接到一个例子;您只发布了注册所需代码的一部分。
如果组件仍然无效,我会尝试从错误控制台通过Components.classes [合同ID ]获取它 - 这将显示问题是否与组件注册有关或者只是全球财产部分。
https://developer.mozilla.org/en/Troubleshooting_XPCOM_components_registration可能对问题排查很有用,尽管它是a bit dated。
答案 1 :(得分:1)
也许是一个更新,因为在发布版本中不再支持使用二进制组件扩展的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: ..}]