问题标签 [xpcom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - XPCOM 安全问题
我正在使用 XPCOM 开发一个 Firefox 插件,我还没有阅读所有文档,但据我所知,插件只是一个 DLL,它通过 XPCOM 接口提供服务并通过 XPCOM 接口与浏览器交互。由于插件本身是一个原生 DLL,安全模型将如何工作?它会依赖于用户信任插件不会做讨厌的事情这一事实,比如使用 OCX 控件吗?
我看不出有任何其他方法可以保护它……有吗?
c++ - 使用 C++ XPCOM 扩展访问 Firefox 上的选项卡
我应该使用哪些 XPCOM 接口来检测选项卡的打开、关闭和切换,并从 firefox 扩展中获取它们的关联 URL?我已经看到了在 JS 中管理选项卡的代码实例,但是 C++ 呢?
.net - 我应该在同一台机器上运行的 Firefox 扩展和 C# 代码之间使用哪种 IPC 方法?
我有一个关于如何在(新)Firefox 扩展和现有 C# 代码之间构建通信的问题。
Firefox 扩展将使用配置数据并生成其他数据,因此需要从某处获取配置数据并将其输出保存在某处。数据由现有的 C# 代码生成/使用,因此我需要决定扩展应如何与 C# 代码交互。
一些相关因素:
- 它只在 Windows 上运行,在相对受控的公司环境中。
- 我在机器上运行了一个 Windows 服务,用 C# 构建。
- 出于其他原因,将数据存储在本地数据存储(如 sqlite)中会很有用。
- 数据量很低,例如每隔几分钟就有 10kb 的未压缩 xml,而且不是很“健谈”。
- 如果不是完全的话,数据交换大部分可以是异步的。
- 与所有项目一样,我的资源有限,所以想要一个相对简单的选项。
- 它不必是超高性能,但不应该增加显着的开销。
- 我正计划在 javascript 中构建扩展(尽管如果真的有必要,可以另外说服)
我正在考虑的一些选项:
- 使用 XPCOM 到 .NET/COM 的桥接器
- 使用 sqlite db:扩展将从中读取并保存到其中。c# 代码将在服务中运行,填充数据库,然后处理服务创建的数据。
- 使用 TCP 套接字在扩展和服务之间进行通信。让服务管理本地数据存储。
我对 (1) 的问题是我认为这会很棘手而且不容易。但我可能完全错了吗?我看到(2)的主要问题是sqlite的锁定:一次只有一个进程可以写入数据,所以会有一些阻塞。但是,通常拥有一个本地数据存储会很好,因此如果性能影响不是太大,这是一个有吸引力的选择。我不知道(3)是否会特别容易或困难......或者采用什么方法来处理协议:自定义或http。
对这些想法或其他建议有何评论?
更新:我打算用 javascript 而不是 c++ 构建扩展
javascript - 查找 XPCOM 合同 ID:components.Classes["THISPART"]
当您需要在 XPCOM 中创建或访问知名对象时,您在哪里可以找到它们的合约 ID?
javascript - 尝试下载页面时,为什么此代码不进行警报测试?
我必须下载 myURLString ( http://www.google.com/search?q=http://www.google.com/&btnG=Search+Directory&hl=en&cat=gwd%2FTop )。
我在想 this.mData 应该有页面的内容,但我无法提醒它,所以我首先尝试提醒测试。怎么了?
更新:我现在正在尝试...
...但它没有被调用。为什么?
firefox - 从 XPCOM 组件向 Firefox 缓存添加条目
nsICacheSession 有一个方法 openCacheEntry() ,它返回一个现有的缓存条目。是否有诸如 createCacheEntry() 之类的方法来创建缓存条目。我想创建一个 XPCOM 对象,该对象将从磁盘读取文件并将它们写入 Firefox 缓存。
谢谢
javascript - 检测 Firefox 扩展版本
我有一个 Firefox 扩展,我想用 install.rdf 中的版本填充“关于”框。
我知道 FUEL 的 extIExtension 允许人们查看扩展的版本,但我没有使用 FUEL 创建扩展(并且 MDC 上的文档似乎对如何过渡到它很清楚)。有没有办法动态检查扩展版本?
我特别不想硬编码或让它从我的 Makefile 生成
c++ - 创建 GStreamer XUL 元素?
我想为基于 XULRunner 的视频编辑应用程序创建一个名为“video”的自定义 XUL 元素。在 XPCOM 文档中解释了如何从 Javascript 访问您的组件,但我似乎找不到任何关于如何声明新 XUL 元素的文档。我在哪里可以找到这个?谁能指出我正确的方向?
澄清
我希望能够将 GStreamer 管道连接到 XUL 小部件。这需要从我的应用程序的 C++ 部分完成。本质上,它归结为调用:
所以我需要实现的是一种从 XUL 小部件访问 windowId(Windows 上的 HWND)的方法。这样的最低要求(访问 XUL 组件的窗口 ID)真的需要我创建 NPAPI 插件吗?创建一个 NPAPI 插件似乎有些令人生畏(但由于这个项目可能是可行的)。我想避免矫枉过正,所以如果 XPCOM 组件就足够了,那就太好了。
解决了!
我在 XPCOM 插件中找到了一种方法。我发现可以获得顶级 XUL 窗口的本机句柄。这需要一些技巧,因为您需要包含一些私有 XUL 标头才能破解打开 de XUL 元素并获取窗口句柄。但是一旦你有了它,你就可以创建一个子窗口。
下一个挑战是让子窗口服从 XUL 的布局管理器。由于此窗口不作为 XUL 元素存在,因此它根本不受布局管理器的影响。解决方法是创建一个 XUL 元素,该元素将用作覆盖本机窗口的占位符。对于这个元素,您需要为“resize”事件注册一个回调。在事件处理程序中,您可以使自定义窗口的大小和位置与 XUL 元素相同。
我使用 XBL 来定义一个名为“video”的元素类型。它包含一个 XUL 标签作为唯一的子元素。这个元素在我的 XPCOM 插件中用于上述布局。
这个解决方案效果很好。
这要归功于 Songbird 团队的 Michael Smith。他在 GStreamer 邮件列表上回答了我的问题。如果你有兴趣可以看看这段代码。
firefox-addon - 找不到打开 AppData/LocalLow 目录的方法
我能够获得用户“AppData/Local”文件夹的路径,如下所示。appdatafile = Components.classes["@mozilla.org/file/directory_service;1"]。获取服务(Components.interfaces.nsIProperties)。get("LocalAppData", Components.interfaces.nsIFile).path;
谁能帮我获取“AppData/LocalLow”用户文件夹?
javascript - 是否有用于禁用/启用 Firefox 扩展的 API?
是否有 API 调用允许启用/禁用 Firefox 插件?