替换 nsICertificateDialogs 从 Firefox 扩展
replace nsICertificateDialogs from firefox extension
我正在尝试用我自己的实现替换nsICertificateDialogs
对话框。我已经有一个扩展程序来处理来自网络邮件的短信。我希望能够在我的扩展中使用 Mozilla 证书存储。我发现导出 smime 证书/密钥(在我的扩展中使用它)的唯一可能性是通过导出 pfx 文件。
我取消注册了原始证书对话框并注册了我的,如此处所述 从命令行调用 nsIX509CertDB.nsIX509CertDB 时失败(取消注册旧工厂并使用正确的 contractID 注册我的)。当我调用Cc[@mozilla.org/nsCertificateDialogs;1].getService(Ci.nsICertificateDialogs);
时,我的类会被实例化。调用certDB.importPKCS12File(null, certfile)
时,我得到一个NS_ERROR_FAILURE
并且我的对话框类没有实例化。
FF 实例化证书对话框时有什么区别。如何测试?我错过了什么?
编辑:我的证书对话框类不会被 ff 实例化 - 即使使用有效的令牌 certDB.importPKCS12File(token, certfile) 调用;In change call var certdialogInterface = Cc[sMimeCertificateDialog.mozillaContractID] .getService(Ci.nsICertificateDialogs);正确实例化我的类(后跟一些 QueryInterface 调用)
编辑:我上传了一个(希望)简单的复制器 http://www.sodgeit.de/dialog_reproducer.zip 查看 src/chrome/components/smime_certificate_dialog.js 和 src/tests/smime_certificate_dialog_test.js
FF 实例化证书对话框时有什么区别。
其实没什么区别。当 Firefox 需要文件密码时,它将调用getNSSDialogs()
函数,并且该函数将执行与您的getService()
调用的道德等效项。但是,getService()
第一次只实例化组件,后续调用不会再次导致实例化 - 这可能是为什么你看不到任何来自 Firefox 代码的原因。
另一个潜在的问题是您没有向函数传递任何令牌。这意味着 Firefox 将尝试确定令牌本身并调用 GetSlotWithMechanism()
。如果有多个可用令牌,它将显示一个选择对话框,它基本上会调用Cc["@mozilla.org/nsTokenDialogs;1"].getService(Ci.nsITokenDialogs).ChooseToken()
。所以也许它出错了,因为这个组件在你的 xpcshell 中不可用 - 这意味着你也必须替换它或显式指定一个令牌。
- 您可以使用JavaScript和Firefox扩展来更改现有页面吗
- 如何在谷歌开发者控制台上为firefox扩展创建oAuth项目
- 无法在XUL Firefox扩展中获取TinyMCE的实例
- 打开一个选项卡,并在firefox网络扩展中向其发出POST请求
- FireFox扩展对TinyMCE编辑器执行脚本注入
- Firefox for Android扩展:如何在每次页面加载时触发事件
- Firefox扩展开发:如何在内容脚本中创建一个全局函数,以便其他加载的脚本文件可以访问它
- firefox扩展/如何访问动态创建的元素
- 将jquery添加到firefox扩展中
- 替换 nsICertificateDialogs 从 Firefox 扩展
- 在扩展崩溃Firefox中使用JS-ctypes
- 从扩展的 javascript 中获取 Firefox 浏览器窗口句柄
- 在firefox扩展上观察并保存http请求
- 安装Crossrider扩展的调试扩展失败-Firefox
- Firefox扩展页面modonAtttach很慢
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- Firefox扩展不适用于http://https://以外的URL
- 为什么我的 init() 函数没有运行?(安装 Firefox 扩展时自动添加工具栏按钮,但仅在首次运行时)
- 如何在 Firefox 扩展的 JavaScript 中的按钮背景中插入图像
- 扩展firefox中的Post标头