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 ="插件的窗口:兼容性"。
更新2 20151125 0748 :如果我有以下内容,则看起来不会显示扩展程序更新对话框: user_pref(" xpinstall.signatures.required",false); 这标志着插件不安全,但允许您继续使用它。
[这解决了我的直接问题,但我相信我会在另一个点上有另一个对话的这个要求,所以仍然希望到达底部]
TL; DR版本,其中包含有关问题的信息。
我目前有一个vbs脚本:
每当进行firefox更新时,用户需要确认一些与检查/更新扩展相关的对话框。
此过程的结果将不会影响到配置文件,因为在我的设置中,每次都会重新创建RUNNING_PROFILE
。
请注意,出于本讨论的目的,是否自动执行udpate并不重要。我有能力重写prefs.js所以我可以动态地改变行为,只需这样做并在外部重新启动浏览器 - 它现在是vbs但是如果我点击的话,我已准备好转移到其他地方进程/窗口管理的一些限制,或者我希望它是可移植的(例如python)。请注意,这些现在不是破坏者,我很高兴能够获得一个非常简洁的仅限Windows的解决方案。
我有一些BASE_PROFILES
,因此我想以编程方式处理更新。
我还没有找到一种方法来实现这一点,不涉及与firefox在GUI中呈现的对话框进行交互。我注意到每次更新后弹出的对话框都可以改变。
选项:
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;
我看过文档,看起来相当令人印象深刻。感觉它会让我做几乎所有事情,所以我在这里的下一步是低估如何枚举对话框,并以某种方式根据某些属性选择正确的对话框,然后按下" ok"按钮。我认为这几乎是我需要做的。
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更新我将在程序文件夹中安装新标准fluff。我目前有一种方法可以通过以下方法重置:(1)清空包含xml文件的firefox程序子文件夹(在%programfiles%\ Mozilla ...中),以及(2)删除search-metadata.json和searchplugins文件夹(在配置文件夹),然后重新从基线复制它们。这一切都让人觉得非常油腻。我还没有在64位版本上尝试这个,我现在正在运行,因为这是一个小问题,我宁愿不引入更多的熵。在此期间,firefox搜索引擎机制可能已经发生了变化。