将XPCOM组件公开给网页中的javascript

时间:2011-02-28 18:39:21

标签: javascript firefox xpcom

我想写一个XPCOM组件,它在网页中作为javascript对象公开。像Google Gears这样的东西就是我所追求的。也就是说,在安装Google Gears Firefox扩展程序后,任何想要使用它的网页都可以使用javascript对象“google.gears”。我发现了很多关于XPCOM开发的mozilla文档,但没有任何关于将组件暴露给网页中运行的javascript的信息。这可能与XPCOM一起使用吗?我是否需要编写Firefox插件而不是扩展名?

5 个答案:

答案 0 :(得分:7)

我正在使用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,然后确保你的清单有一行如下:

category JavaScript-global-property crypt @droplettr.com/domcrypt;1

请参阅:https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest

答案 1 :(得分:1)

This article似乎很有希望:

  

一般来说,不受信任的内容   (如网页)无能为力   与大多数XPCOM组件,包括   创造它们。当然有   此政策的例外情况 - DOM   例如,对象得到了美化   XPCOM组件具有明确定义   供公众使用的界面。对于网络   但是,页面使用组件   包括呼吁任何方法或   属性,组件必须   明确告诉Mozilla是什么   允许的,什么不是。该   nsISecurityCheckedComponent接口   定义如何完成。

来源http://weblogs.mozillazine.org/weirdal/archives/017211.html

答案 2 :(得分:1)

旧的3.x方法是在“JavaScript全局属性”类别中注册您的组件。 (这仍然适用于4.x,但您必须使用“JavaScript-global-property”类别,因为不再允许类别名称包含空格。)您的对象必须实现nsIClassInfo接口,加上您想要向内容公开的任何接口。它并不是非常有用,因为您无法知道哪些内容脚本正在访问您的对象。

答案 3 :(得分:0)

这是可行的,但您必须代理对XPCOM组件的调用。还要记住,它也可能非常危险。

请参阅我的回答here,了解如何将chrome对象公开给内容代码。

答案 4 :(得分:0)

您可以使用网络扩展程序执行此操作,我已阅读并且将不再提供支持