javascript - 将 XPCOM 组件暴露给网页中的 javascript

标签 javascript firefox xpcom

我想编写一个 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

关于javascript - 将 XPCOM 组件暴露给网页中的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5146114/

相关文章:

javascript - Mozilla A 框架加载图像两次

javascript - 可以使用 'this' 关键字计算自身属性的对象

java - Selenium:如何在 Firefox 中禁用 webdriver ="true"?

javascript - 重写 nsIWindowWatcher 组件

c++ - 如何从外部应用程序读取使用 FireFox 下载的文件的源 URL?

javascript - 按下回车键时如何禁用自动提交行为?

javascript - jQuery 选择 ParentClass 下具有 ParticularClass 名称的所有类

firefox - Selenium Server 启动 Firefox,但 Firefox 不加载 RemoteRunner

css - 在 Firefox 的一台计算机上选择不样式化的标签

c++ - 使用 C++ 开发 Thunderbird 扩展