以编程方式更新firefox配置文件

MrR*_*MrR 6 javascript firefox firefox-addon firefox-addon-sdk firefox-developer-tools

Windows 7/Firefox最新版本/首选64位测试版

每当更新Firefox配置文件时,都会向用户显示一个对话框,以检查插件的更新.我想以编程方式与tha对话进行交互,以便自动确定.

到目前为止,我的研究已经将我带到了:https: //developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWindowMediator 为此我需要一个窗口类型来枚举.窗口类型与XUL定义中的属性相关.在我安装Firefox时,这些似乎是在"c:\ Program Files\Mozilla Firefox\browser\omni.ja\chrome\browser\content\browser"中压缩的.

我对firefox API的经验有限.我正在通过userchrome.js执行代码.

任何指针都会很乐意收到.

更新1 20151125 0748:我相信这是xul - https://archive.is/NyGBS - 关于如何在userchrome.js中"覆盖"它的任何指针?我也可以尝试枚举windowtype ="Addons:Compatibility"的窗口.

更新2 20151125 0748:如果我有以下内容,则看起来没有显示扩展更新对话框:user_pref("xpinstall.signatures.required",false); 这标志着插件不安全,但允许您继续使用它.

[这解决了我的直接问题,但我确信我会在另一个点上有另一个对话的这个要求,所以仍然希望到达这个底部]


TL; DR版本,其中包含有关问题的信息.

我目前有一个vbs脚本:

  1. 删除FIREFOX_RUNNING_PROFILE文件夹.
  2. 复制FIREFOX_BASE_PROFILE文件夹 - > FIREFOX_RUNNING_PROFILE文件夹.
  3. 运行FIREFOX_RUNNING_PROFILE.

每当进行firefox更新时,用户需要确认与检查/更新扩展相关的许多对话框.这个过程的结果将不会影响到配置文件,因为我的设置RUNNING_PROFILE每次都会重新创建.

请注意,出于本讨论的目的,udpate是否自动执行并不重要.我有能力重写prefs.js所以我可以动态地改变行为,只需这样做并在外部重新启动浏览器 - 它现在是vbs但是如果我在进程/窗口中遇到一些限制,我已经准备好转移到其他地方了管理,或者我希望它是可移植的(例如python).请注意,这些现在不是破坏者,我很高兴能够获得一个非常流畅的Windows解决方案.

我有一些这样的BASE_PROFILES,因此我想以编程方式处理更新.

我还没有找到一种方法来实现这一点,不涉及与GUI中的firefox对话框进行交互.我注意到每次更新后弹出的对话框都会发生变化.

选项:

1)userchrome.js - >我已经使用它来管理一些imacros自动启动功能,包括从Components.Interfaces中获取配置文件名称.我正在报告下面的片段,以帮助读者了解我针对Mozilla xpcom组件编写的最复杂的片段:

var strProfileFilePath=Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).path;
Run Code Online (Sandbox Code Playgroud)

我看过文档,看起来相当令人印象深刻.感觉它会让我做几乎所有的事情,所以我在这里的下一步是低估如何枚举对话框,并以某种方式根据某些属性选择正确的对话框,然后按"确定"按钮.我认为这几乎是我需要做的.

2)Autohotkey.我可以尝试将密钥发送到firefox窗口(不确定窗口内的确切对话框).对话框通常有快捷方式,可以响应这些密钥的优点(很好的理论).在autohotkey我也可以"定位点击",虽然由于明显的原因它不太令人满意.

3)通过Autohotkey的一个途径涉及在幕后使用MozRepl Firefox插件.这里讨论的库https://archive.is/73u4f,github似乎已过时https://github.com/arbiter34/FF-Control.然后我可以直接使用mozrepl,不需要Autohotkey.我宁愿用python,java甚至javascript,powershell,vbs编写代码而不是autohotkey.首先看起来它看起来会给我与userchrome.js目前提供的功能相同.

4).我可以利用一些配置文件操作功能 - 虽然Selenium并不是真的设计用于与Firefox自己的对话框进行交互,但我没有看到用于自动化的API.相反,人们会动态地合成一个配置文件,在已知的超级配置文件中安装所有必需的扩展(包含要使用的所有扩展的超集),并动态地将任何mods应用于prefs.js.这对我原来的要求听起来有点难看,但经验告诉我,丑陋仍然比手动更好.

5)还可以选择编写一个插件,但我再次认为我是在与userchrome.js相同的接口进行交互(实际上我相信userchrome.js更好,因为它似乎没有自由访问核心组件,这正是我觉得我可能需要的情况).我宁愿避免写一个插件,尽管我可能会因为试图解释原因而丢失.我感谢我没有"进一步"进一步调查,但我现在处于一个需要引起社区意见的地步,然后才开始在这些方面花费大量时间.

以下问题并非严格要求以下问题,但我觉得分享这个问题可能会有所帮助,因为必须有其他几个人遇到同样的困境:

附加要点:

一个.作为一般原则,我没有想要更新任何东西(firefox.exe,插件,语言包,插件和什么不是)(插件实际上是完全禁用的).我对系统工作方式没问题,我不想改变它一毫米.是的,没有,甚至没有安全更新.这是因为我的应用程序的特殊情况,我对我正在承担的特定风险的特别估计,以及我对风险的普遍厌恶.YMMV.永远不会在任何时候我都被迫升级(1)我"犯了一个错误"(所有这一切都需要一个配置文件更新设置错误,以便为机器上的所有配置文件更新exe - doh!只有一个exe); (2)Firefox崩溃太多/无法使用(发生两次); (3)我需要升级提供的功能(尚未发生); 我还想保留"非常关键的安全更新"的选项(叹息!有时甚至可以低头).

湾 保持你的firefox配置文件整数跨越更新的神秘艺术也涉及搜索引擎 - 如果我说我不想更新它们无关紧要,每当有firefox.exe更新我将获得新的标准绒毛安装在程序文件夹.我目前有一种方法可以通过以下方法重置:(1)清空包含xml文件的firefox程序子文件夹(在%programfiles%\ Mozilla ...中),以及(2)删除search-metadata.json和searchplugins文件夹(在配置文件夹),然后重新从基线复制它们.这一切都让人觉得非常油腻.我还没有在我正在运行的64位版本上尝试这个,因为这是一个小问题,我宁愿不介绍更多的熵.firefox搜索引擎机制可能在此期间发生了变化.