Mozilla XPCOM is not registered



我正在尝试为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: ..}]

相关内容

  • 没有找到相关文章

最新更新