我想编写一个XPCOM组件,该组件在网页中作为javascript对象公开。我正在寻找Google Gears之类的东西。也就是说,在安装了Google Gears Firefox扩展程序后,任何想要使用它的网页都可以使用javascript对象“google.gears”。我已经找到了许多关于XPCOM开发的mozilla文档,但是没有将组件暴露给网页中运行的javascript。 XPCOM有可能吗?我需要编写Firefox插件而不是扩展程序吗?
最佳答案
我正是使用Firefox 4中的新API-nsiDOMGlobalPropertyInitializer来完成此操作的-它使您可以创建一个JS对象以延迟地附加到所有窗口。这是在Firefox 4中创建新Web控制台的方式。
您的组件中必须具有以下QI属性:
QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer]),
这是扩展中完整实现的示例:
https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.js
所以基本上,QI到Ci.nsIDOMGlobalPropertyInitializer,然后确保 list 中有一行:
category JavaScript-global-property crypt @droplettr.com/domcrypt;1
请参阅:https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest