禁用/更改Firefox安全模式热键(Shift)

时间:2012-04-11 17:33:57

标签: firefox selenium keyboard-shortcuts safe-mode

有没有办法改变使firefox以安全模式启动的firefox shift热键?我已经使用Selenium和PHPUnit设置了一些单元测试,但是如果我在测试运行的时候在机器上工作,那么我经常发现我在键入时按下shift(保持shift,因为我选择了代码块是另一个大罪犯)。即使您单击弹出的安全模式提示,这也会导致测试失败(和超时)。

是否有办法禁用此热键,或将密钥更改为我不经常使用的密钥?

3 个答案:

答案 0 :(得分:4)

我也遇到过这个问题而没有找到解决方案。它似乎仍然是一个未解决的问题:Mozilla Forums threadBug 653410Bug 644175等等。作为一种解决方法,您可以安装firefox 3.6,因为自firefox 4以来已实现此功能,但可能这不适合您。

答案 1 :(得分:2)

Mozilla最终添加了一个环境变量来控制此行为。不幸的是,以适用于整个图形系统的方式配置此环境变量,而不仅仅是一个bash会话,有点困难。这曾经是通过/etc/launchd.conf完成的,但macOS在v10.10中放弃了对此的支持。幸运的是,systemctl提供了一个.plist文件系统,它可以定义运行程序并在启动时定义系统范围的环境变量,因此我发布了这个工作.plist文件,其中包含安装和删除它的说明:

https://github.com/mcandre/dotfiles/blob/master/setenv.MOZ_DISABLE_SAFE_MODE_KEY.plist

这对我来说很棒,因为我喜欢通过QuickSilver从GUI中的任何位置使用Control + Alt + G启动我的Web浏览器,这当然包括Firefox倾向于将其解释为信号安全模式的Alt修饰符。

答案 2 :(得分:0)

在修复Bug 653410之前,我能提出的最佳解决方法是检测何时启动安全模式并以最适合您特定目的的方式处理它。这可能意味着杀死Firefox进程并再次启动,或者可能意味着警告用户,或两者。

当Firefox启动进入安全模式时,会将“LastVersion = Safe Mode”写入其配置文件目录中的compatibility.ini文件。下面给出了一个示例C#函数。

    FileSystemWatcher safeModeWatcher;

    private void watchSafeMode()
    {
        string profiles = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mozilla", "Firefox", "Profiles");
        string defaultProfile = Directory.GetDirectories(profiles, "*default*")[0];
        safeModeWatcher = new FileSystemWatcher(defaultProfile, "compatibility.ini");
        safeModeWatcher.NotifyFilter = NotifyFilters.LastWrite;
        safeModeWatcher.Changed += delegate(object s, FileSystemEventArgs e)
        {
            if (File.ReadAllText(e.FullPath).Contains("LastVersion=Safe Mode"))
            {
                // safe mode!
                System.Diagnostics.Trace.WriteLine("safe mode detected!");
                // TODO kill Firefox and launch again, or whatever makes sense for you
            }
        };
        safeModeWatcher.EnableRaisingEvents = true;
        // ...
        // TODO Dispose safeModeWatcher when done
    }