以编程方式关闭 Firefox Quantum 中的所有标签页

以编程方式关闭 Firefox Quantum 中的所有标签页

1. 总结

我找不到如何在不手动单击鼠标的情况下关闭 Firefox Quantum 中的所有选项卡。


2. 详细信息

(预防细节XY问题

我正在处理多个项目。我需要始终为不同的项目打开选项卡(不同的项目使用不同的选项卡)。

当我开始处理我的一个项目时,我希望自动快速地在项目之间切换:我按热键→关闭所有当前浏览器选项卡→打开特定于项目的选项卡。


3. 要求

3.1. 标签类型

以下类型的标签也必须关闭:

  1. 已固定
  2. 当前的;browser.tabs.closeWindowWithLastTabfalse对我来说关键价值

3.2. 方法

欢迎使用任何用户不需要手动点击特定按钮的方法。例如,通过任何免费方法获取预期行为会很好:

  1. 扩展或脚本(例如,用 AutoHotkey 编写),以便我可以通过以下方式关闭所有选项卡:

    1. 捷径
    2. 和/或下划线访问键快捷键Firefox 菜单或上下文菜单
  2. CLI 命令

但点击 Firefox 工具栏中的特定按钮并不是预期的。原因 — 我不知道如何编写脚本,可以自动点击特定按钮(但如果您知道该怎么做,请回答)。

3.3. 禁止点击特定坐标

是的,例如,我可以安装Close All Tabs Button扩展 → 获取此扩展按钮的坐标 → 通过 AutoHotkey 设置自动点击到这些坐标xy

但这不是更好的解决方案。我可以:

  1. 在 Firefox 工具栏中添加、删除和移动按钮。
  2. 调整 Firefox 窗口大小。

在这些情况下坐标将会发生变化。

3.4. 不自动添加群组

我尝试了一些 Firefox 标签管理器/标签组织器。它们有一个常见的非预期行为。

我创建了我的项目的标签组→我为每个组添加了所需的 URL→我在浏览器中打开了任何新标签→这些标签会自动添加到其中一个组中。

我不需要自动将随机选项卡添加到组中。组必须包含一组特定的选项卡;在我的例子中,添加、编辑和删除组的选项卡必须完全手动。

3.5. 保留当前 Firefox 配置文件

我可以通过编程关闭 Firefox → 然后打开带有特定标签的新 Firefox 实例像这样:

firefox -P "SashaChernykh" --new-tab -url https://KiraGoddess.com --new-tab -url https://KiraGreatest.com

但在这种情况下,上一个会话中固定的标签将保留在新实例中。

我找不到如何解决这个问题的方法。是的,我可以使用新的 Firefox 配置文件打开新标签,但这可能不是一个好主意。我必须为每个配置文件配置和更新设置、扩展、书签等。这是额外的工作,而一个配置文件对我来说就足够了。

最好关闭所有标签,保留当前的 ​​Firefox 配置文件。


4. 没有帮助

4.1. 关闭所有标签扩展

4.1.1. 不关闭固定标签页和当前标签页

参见 3.1 项,为什么不符合预期。

  1. 关闭所有标签
4.1.2. 没有热键和/或菜单项

参见 3.2 项,为什么不符合预期。

  1. 关闭所有标签页按钮
4.1.3. 两者

两个问题:Doesn't close pinned and current tabsNo hotkeys and/or menu items

  1. 标签关闭
  2. 关闭所有标签页按钮

4.2. 标签管理器

4.2.1. 非自由
  1. 吐司
  2. 沃科纳
4.2.2. 自动添加到组

我在3.4项目中描述了这个问题。

  1. 简单标签组
  2. 选项卡工作区
  3. 标签管理器
  4. 电源标签
  5. 全景选项卡组
  6. Firefox 的 Tab Manager Plus
  7. 康奈克斯
  8. 标签组切换
4.2.3. 没有热键

使用这些扩展,我可以关闭所有之前的选项卡并打开新的选项卡;但需要手动点击鼠标。详情请参阅 3.2 项。

  1. 群组快速拨号
  2. 标签存储

答案1

此 AHK 脚本适用于 Firefox 74.0(64 位),前提是选项“在 Windows 任务栏中显示选项卡预览“在 Firefox 设置中启用:

#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
DetectHiddenWindows, On

#IfWinActive ahk_exe firefox.exe  ; only if firefox is the active window

    F1::
    title1 := ""      ; empty var
    title2 := ""
    title3 := ""    

    ; Close all but the active tab:
    WinGetTitle, title1, A
    WinGet, id, list, ahk_class MozillaTaskbarPreviewClass
    Loop, %id%
    {   
        this_ID := id%A_Index%  
        WinGetTitle, title2, ahk_id %this_ID%
        If (title2 != title1)
            WinClose, ahk_id %this_ID%
    }

    ; Close the active tab as soon as another tab gets active:
    SetTimer, CloseActiveTab, 1000  
    return

#IfWinActive

CloseActiveTab: 
If WinActive("ahk_exe firefox.exe")
{
    WinGetTitle, title3, A  
    If (title3 != title1)
    {
        SetTimer, CloseActiveTab, off       
        WinClose, %title1% ahk_class MozillaTaskbarPreviewClass
    }
}
return

编辑:

在修改后的脚本中将伪数组替换为基于对象的数组:

DetectHiddenWindows 1
WinActivate ahk_exe firefox.exe

~c & ~f::
Array := []
WinGet, KiraTabsNumber, List, ahk_class MozillaTaskbarPreviewClass
Loop %KiraTabsNumber% {
    Array.Push(KiraTabsNumber%A_Index%)
}
for index, element in Array
    WinClose ahk_id %element%
return

相关内容