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

2024-03-20

我想编写一个 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 https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.js

所以基本上,QI 到 Ci.nsIDOMGlobalPropertyInitializer,然后确保你的清单中有这样一行:

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

see: https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 XPCOM 组件公开给网页中的 javascript 的相关文章

  • 修复 JSLint“意外的‘this’。”错误?

    我试图让以下代码成为符合 jslint 标准 http jslint com 但我陷入以下两个错误 本来应该看到一个声明 结果却看到了一个块 and 意想不到的 这个 我应该对我的代码进行哪些更改才能使 JSLint 满意 var pvAc
  • OpenLayers:放大或缩小后,被破坏的特征会重新出现

    我有一个 OpenLayers Bing 地图应用程序 可以显示危险废物站点 用户可以单击链接来切换地图上站点的子站点 当我通过调用层上的 destroyFeatures 来关闭子站点 它们是向量层上的点 时 它们会按预期消失 但是 如果我
  • 查找并删除 Javascript 对象数组中的第一个匹配元素

    假设我有一个数组 members name Anna class one name Bob class two name Chuck class two removed members myRemoveByClass two somethi
  • Angular JS - 提交到 $http 时日期发生变化 - 时区问题

    我遇到一个奇怪的问题Date当它通过 http put 传递到 API 时发生变化 我怀疑时区问题 Datepicker 触发 ng change 事件 console log Tue Jun 10 2014 00 00 00 GMT 01
  • jQuery 无法在外部 JavaScript 中工作

    我是 jQuery 新手 遇到了一些奇怪的问题 我正在使用 jQuery 的change and click方法 在我的 HTML 文件中使用时它们工作正常
  • 页面其余部分完成加载后延迟加载 html5 视频

    我有一个视频元素用作我正在构建的页面底部部分的背景 我试图通过将 src 存储为 data src 属性并使用 jQuery 在其他资源加载后将其应用到 src 属性 因为它不是英雄图像或任何东西 我想加载海报以节省加载时间 然后稍后加载视
  • Ng Bootstrap 日期范围选择器 [markDisabled] 不适用于输入

    我正在尝试禁用某些日期ng 引导范围选择器 https ng bootstrap github io components datepicker overview 目前 我在弹出窗口中有一个范围选择器 并且我正在使用 markDisable
  • History.pushState和页面刷新

    我开始研究 HTML5 新历史 API 不过 我有一个问题 如何处理页面刷新 例如 用户单击一个链接 该链接由 js 函数处理 该函数 异步加载页面内容 使用history pushState 更改URL 用户刷新页面 但是服务器上当然不存
  • 使用javascript向url添加哈希而不滚动页面?

    在不滚动页面的情况下向 url 添加哈希 使用 JavaScript 我打开页面 我向下滚动 我单击添加哈希的链接 可能带有值 test 示例 http www example com test http www example com t
  • 将 DIV 转换为单击并拖动视口

    有人知道一种不显眼的 基于原型或无框架的方法将具有大内容 例如地图 的 DIV 转换为具有固定尺寸的可点击和可拖动的 地图 容器 非常像 Google 地图 我想在大型输入表单中显示 HTML 块 这些块可能会超出可用空间 每个块可以有大约
  • 如何在 AWS Amplify 上运行 React/Redux 应用程序的代理

    我最近实施了Proxy 在 Express js 中 对于我的反应应用程序发出请求时隐藏 API URL 当我在本地主机上运行代理和应用程序时 它工作得非常好 现在我已准备好将我的应用程序部署到AWS 放大 我对如何让我的代理在那里运行有点
  • 无法安装js-bson

    我正在使用Windows 7 64位 尝试安装bson作为mongodb的依赖项 我收到此错误 npm WARN package json email protected cdn cgi l email protection No READ
  • 如何制作实时jquery效果?

    我想制作一个实时提要阅读器 并且我想要一个解决方案 使新项目无需刷新页面即可出现 并且具有像friendfeed一样的滚动效果 你可以在这里看到我在说什么 http www vimeo com 4029954 http www vimeo
  • 将罗马数字转换为阿拉伯数字--recursiv

    我是 JavaScript 新手 正在网站的帮助下学习https www jshero net koans roman1 html https www jshero net koans roman1 html 本练习是编写一个转换器 将罗马
  • jQuery clone() 复制数据...有时...?

    使用下面的示例 我有一个tr我正在复制 它包含一个 jQueryautocomplete 第一次克隆时 自动完成功能不起作用 因为附加的data items 一片空白 第二次单击 添加 按钮时 自动完成功能将起作用 此后 再次单击 添加 会
  • FB.getLoginStatus() 不起作用

    我正在尝试编写一段代码来检查用户是否登录 发现FBJS API中有一个内置方法 叫做getLoginStatus 我已经在html中实现了它 但出于某种原因 getLoginStatus 内部的alert 不会被触发 我也尝试在 init
  • 如何使用 Javascript 从 Chrome iOS 下载 blob 文件?

    如何使用 Javascript 从 Chrome iOS 下载 blob 文件 我正在从 iOS 下载文件 pdf excel txt png iOS 没有文件系统 这对下载来说是一个问题 我创建了一个代码 根据操作系统和导航器 如果需要
  • Apollo 客户端“未找到命名导出‘删除’”

    我正在尝试创建一个apollo client插件Nuxt 3应用 它当前抛出有关名为的包的错误ts invariant file Users my name Repositories project node modules apollo
  • Escape String - 在 Javascript 中输出rails字符串[重复]

    这个问题在这里已经有答案了 我正在尝试将字符串值分配给 erb 文件中的 javascript 对象 如下所示 var data name 问题是 如果name is Tom s small ears 的输出data name将会Tom x
  • 将响应式网格布局转换为 Plotly Dash

    我是一个非常活跃的 Dash 用户 我开始发现 Dash 使用中存在很多限制 并且我意识到有关如何将组件转换为 Dash 的信息 内容绝对有限 并且示例过时且非常简单 并且我对 Javascript 或 React 几乎没有任何了解 我完全

随机推荐

  • 我可以通过编程方式推导出 C++ dll 使用的调用约定吗?

    想象一下 您想要编写一个程序来测试 c dll 文件中的函数 您应该允许用户选择一个 dll 我们假设我们正在讨论 c dll 他应该能够获得 dll 导出的所有函数的列表 然后 用户应该能够从列表中选择一个函数名称 手动输入参数列表 参数
  • conda:从基本/根环境中删除所有已安装的软件包

    TL DR 如何删除所有已安装的软件包base 我在我的计算机中安装了一堆机器学习包base康达环境 我现在创建了一个ml机器学习环境 并希望重置我的base环境 删除安装在那里的所有软件包 我试过了 activate base conda
  • 实现 Serialized 接口的 Java 类

    我需要一个实现可序列化的类的列表 您还能告诉我什么样的类实现了该接口吗 在Java API中 大多数类都实现了Serialized here http java sun com javase 6 docs api java io class
  • 为文本添加背景颜色,但段落行之间留有空格

    我想知道 CSS 是否可以做一些事情 基本上我想使用 html css 在图像的 RHS 上重新创建文本 但目前我正在获取图像的 LHS HTML div div p This is an example of what I have p
  • 如何在php中编写json文件作为数据源?

    我有一些这样的数据 name abc adr bcd partners 101 name xyz com prices 1001 description Single Room amount 125 from 2012 10 12
  • 在不同条件下更新sequelize中的多行

    我正在尝试对 postgres 数据库中的行执行带有sequelize 的更新命令 我需要能够使用相同的值更新具有不同条件的多行 例如 假设我有一个包含以下字段的用户表 ID 名 姓 Gender Location 创建于 假设 我在此表中
  • rstudio - 是否可以在后台运行代码

    关于 RStudio 的问题 假设我在控制台中运行代码 gt code1 假使 假设code1 在控制台上不打印任何内容 但是code1 以上需要一个小时才能完成 我想在等待的同时做点别的事code1 是否可以 有没有类似的函数runInB
  • 为什么我会收到“找不到所请求的资源”。当访问简单的喷涂路线时?

    我尝试了一个简单的喷雾示例应用程序 但无法访问路线 我将示例源代码上传到了 github 但该示例源代码不起作用 喷雾 Tomcat 示例 https github com avidanyum spray tomcat example gi
  • 左排除加入续集

    我有两张表 其中一张表有另一张表的 ID 1 1 关系 所以像 EventFeedback somePrimaryKey userEventID UserEvent userEventID Sequelize 的关系定义为 models U
  • 在 Windows 10 上无法查看 Robomongo 中的集合

    我在互联网上彻底搜索但几乎找不到任何东西 我已经在 Windows 10 上安装了 MongoDB 3 2 0 和 Robomongo 0 8 5 安装后我能够成功启动 MongoDB 作为服务 之后 我在成功运行的 DBRestore e
  • Javascript 中两个字符串之间的网络效率差异

    我有一个网络应用程序 其中客户端编辑器正在编辑服务器端已知的非常大的文本 客户可以对此文本进行任何类型的修改 什么是最网络效率高如何以服务器理解的方式传输结果差异 另外 由于这将发生在客户端 Javascript 我也希望它 快 或者至少不
  • 无法从 Firebase 上的存储引用获取 URI

    我正在尝试获取存储在 Firebase 存储中的图像 URI 以便使用另一种方法对其进行处理 我正在使用以下内容 FirebaseStorage storage FirebaseStorage getInstance StorageRefe
  • 并行运行子进程

    我有一个 python 脚本 它必须调用某个应用程序 3 次 这些调用应该是并行的 因为它们需要几个小时才能完成并且彼此不依赖 但他们的脚本应该停止 直到所有脚本都完成 然后做一些清理工作 这是一些代码 do some stuff for
  • 重新安装 Android studio 会导致我的 Google Maps API 无法在我的应用程序中显示吗?

    我创建了一个利用 Google Maps API 的应用程序 我总是通过将其副本保存在外部驱动器上来备份我的应用程序 我最近重新安装了 Windows 并且不得不重新安装 Android Studio 当我导入保存的应用程序项目并运行它时
  • jQuery 禁用链接直到页面加载

    我有一个附加到链接的 jquery 弹出窗口 如果单击链接时页面未完全加载 即 js 文件 它将在浏览器窗口中打开 而不是弹出窗口 我正在考虑禁用 隐藏链接 直到加载页面 处理这种情况的最佳实践是什么 您有任何代码示例吗 首先将链接放在 d
  • 如何动态添加新值以选择 jira 中的列表字段或使用插件

    这是我的用例 1 我有一个 客户名称 文本字段和 所有客户 单选列表 2 问题解决后 我想选择 客户名称 中存在的值 并希望添加到 所有客户 中 如果要添加的值已存在于 所有客户 中 我就能够实现此目标 但我想用新值填充 所有客户 字段 如
  • Dragula JS通过点击事件从一个列表移动到另一个列表

    我使用 Dragula JS 进行拖放功能 并且我还希望可以选择通过单击鼠标来来回移动列表中的元素 而不会失去拖放功能 我该如何实现这一点 所以我单击元素 1 它将移动到列表中 我从该列表中将其单击回来 它就会向后移动 就是这个想法 如果有
  • Oracle 日期差值获取年数

    有没有办法计算日期之间的年数 不知道如何在考虑跳跃和不考虑什么的情况下做到这一点 是否可以在 SELECT 中执行 IF 语句 Thanks I d use months between 可能与floor select floor mont
  • 为什么使用 number_format() 我的数值会发生变化?

    下面的代码给了我两个不同的输出 number 1562798794365432135246 echo number echo number format number 谁能解释一下吗 编辑 忘了提及 上面给了我 15627987943654
  • 将 XPCOM 组件公开给网页中的 javascript

    我想编写一个 XPCOM 组件 该组件在网页中作为 JavaScript 对象公开 我正在寻找像 Google Gears 这样的东西 也就是说 安装 Google Gears Firefox 扩展后 任何想要使用它的网页都可以使用 jav