如何修复与Firefox快捷键冲突的标签搜索用户脚本?
修复Mac Firefox下的标签搜索快捷键脚本
问题根源
Mac Firefox中,Ctrl+Click、Shift+Click、Cmd+Click的默认浏览器行为(右键菜单、新窗口/标签页)会优先于脚本的click事件触发,导致原脚本的组合键逻辑仅能触发Alt(Option)+Click,其余组合完全失效。
修改后的脚本代码
var wrappers = document.querySelectorAll("td div.tags"); wrappers.forEach(function(div) { // 提前拦截mousedown事件,阻止浏览器默认行为 div.addEventListener('mousedown', function(ev) { if (ev.altKey === true && ev.target.nodeName.toUpperCase() === "A") { ev.preventDefault(); ev.stopPropagation(); } }, true); // 处理标签添加逻辑 div.addEventListener('click', function(ev) { if (ev.altKey === true && ev.target.nodeName.toUpperCase() === "A") { ev.preventDefault(); var anchor = ev.target, linkQuery = new URLSearchParams(anchor.search); var tag = linkQuery.get('taglist'), taglist; if (tag) { // 适配Mac Firefox的组合键: // Option+Click → AND标签(无符号) // Option+Command+Click → NOT标签(-前缀) // Option+Command+Control+Click → OR标签(|前缀) if (ev.metaKey === true) { tag = '-' + tag; if (ev.ctrlKey === true) { tag = '|' + tag; } } var pageQuery = new URLSearchParams(window.location.search); taglist = pageQuery.get('taglist')?.split(' ') || []; if (taglist.indexOf(tag) === -1) taglist.push(tag); pageQuery.set('taglist', taglist.join(' ')); window.location.search = pageQuery.toString(); } } }, true); });
关键修改说明
- 新增mousedown事件拦截:在浏览器触发右键菜单、新窗口等默认行为前,提前调用
preventDefault()和stopPropagation(),确保后续click事件能正常执行脚本逻辑。 - 调整组合键映射:
- 放弃原
Shift+Click组合(会触发Firefox新窗口行为),改用Option+Command+Click实现NOT标签 - 用
Option+Command+Control+Click实现OR标签,避开浏览器默认快捷键冲突
- 放弃原
- 兼容空taglist场景:添加可选链和默认数组,避免页面初始无taglist时出现报错。
使用方式
Option+Click:添加无符号的AND逻辑标签Option+Command+Click:添加带-前缀的NOT逻辑标签Option+Command+Control+Click:添加带|前缀的OR逻辑标签
内容的提问来源于stack exchange,提问作者KitchenConsort
相关产品推荐
相关产品推荐

