1. 总结
我找不到如何在不手动单击鼠标的情况下关闭 Firefox Quantum 中的所有选项卡。
2. 详细信息
(预防细节XY问题)
我正在处理多个项目。我需要始终为不同的项目打开选项卡(不同的项目使用不同的选项卡)。
当我开始处理我的一个项目时,我希望自动快速地在项目之间切换:我按热键→关闭所有当前浏览器选项卡→打开特定于项目的选项卡。
3. 要求
3.1. 标签类型
以下类型的标签也必须关闭:
3.2. 方法
欢迎使用任何用户不需要手动点击特定按钮的方法。例如,通过任何免费方法获取预期行为会很好:
扩展或脚本(例如,用 AutoHotkey 编写),以便我可以通过以下方式关闭所有选项卡:
- 捷径
- 和/或下划线访问键快捷键Firefox 菜单或上下文菜单
CLI 命令
但点击 Firefox 工具栏中的特定按钮并不是预期的。原因 — 我不知道如何编写脚本,可以自动点击特定按钮(但如果您知道该怎么做,请回答)。
3.3. 禁止点击特定坐标
是的,例如,我可以安装Close All Tabs Button
扩展 → 获取此扩展按钮的坐标 → 通过 AutoHotkey 设置自动点击到这些坐标x
。y
但这不是更好的解决方案。我可以:
- 在 Firefox 工具栏中添加、删除和移动按钮。
- 调整 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 项,为什么不符合预期。
4.1.2. 没有热键和/或菜单项参见 3.2 项,为什么不符合预期。
4.1.3. 两者两个问题:Doesn't close pinned and current tabs
和No hotkeys and/or menu items
。
4.2. 标签管理器
4.2.1. 非自由 4.2.2. 自动添加到组我在3.4项目中描述了这个问题。
4.2.3. 没有热键使用这些扩展,我可以关闭所有之前的选项卡并打开新的选项卡;但需要手动点击鼠标。详情请参阅 3.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