用户脚本恢复正常 link 单击行为以在 ctrl+click 时在新选项卡中打开
Userscript to restore normal link click behavior to open in a new tab when ctrl+clicked
使用 Greasemonkey 或 Tampermonkey,当 Ctrl+ 单击时,如何在新选项卡中打开 thesaurus.com 处列出的同义词(链接),或者新的window 当 Shift+ 单击时?目前,它在同一个选项卡中打开 Ctrl+clicked 和 Strl+clicked 链接。
该站点通过附加其自己的不支持修改键的原始 click
处理程序,破坏了标准 link 行为,这是一件非常糟糕的事情。
有时您可以使用 jQuery('a').off('click')
,但通用的方法是:
- 在站点附加自己的侦听器之前,在最顶部的 DOM 对象
window
上附加点击侦听器:使用 @run-at document-start
元数据键。
- 为 addEventListener 的 useCapture 参数指定
true
以在 capturing 阶段开始时拦截事件window
到点击目标。因此,我们还增加了在 bubbles 之前拦截网站监听点击事件的元素的机会(可以是任何东西,从 a
到 window
) 使用标准的非捕获侦听器。
- 使用
event.stopPropagation()
防止随后附加的站点侦听器看到点击事件。
- 通过在目标 link
href
[=44] 中通过 #
自我重定向跳过虚拟 links 来保护基于 link 的合法站点功能=] 通过将点击目标的 CSS 选择器限制在内容区域。
// ==UserScript==
// @name Restore links behavior
// @match *://www.thesaurus.com/*
// @run-at document-start
// ==/UserScript==
window.addEventListener('click', function(e) {
var link = e.target.closest('a');
//var link = e.target.closest('#content a'); // limit to the #content area
if (link && link.getAttribute('href') != '#') {
e.stopPropagation();
}
}, true);
使用 Greasemonkey 或 Tampermonkey,当 Ctrl+ 单击时,如何在新选项卡中打开 thesaurus.com 处列出的同义词(链接),或者新的window 当 Shift+ 单击时?目前,它在同一个选项卡中打开 Ctrl+clicked 和 Strl+clicked 链接。
该站点通过附加其自己的不支持修改键的原始 click
处理程序,破坏了标准 link 行为,这是一件非常糟糕的事情。
有时您可以使用 jQuery('a').off('click')
,但通用的方法是:
- 在站点附加自己的侦听器之前,在最顶部的 DOM 对象
window
上附加点击侦听器:使用@run-at document-start
元数据键。 - 为 addEventListener 的 useCapture 参数指定
true
以在 capturing 阶段开始时拦截事件window
到点击目标。因此,我们还增加了在 bubbles 之前拦截网站监听点击事件的元素的机会(可以是任何东西,从a
到window
) 使用标准的非捕获侦听器。 - 使用
event.stopPropagation()
防止随后附加的站点侦听器看到点击事件。 - 通过在目标 link
href
[=44] 中通过#
自我重定向跳过虚拟 links 来保护基于 link 的合法站点功能=] 通过将点击目标的 CSS 选择器限制在内容区域。
// ==UserScript==
// @name Restore links behavior
// @match *://www.thesaurus.com/*
// @run-at document-start
// ==/UserScript==
window.addEventListener('click', function(e) {
var link = e.target.closest('a');
//var link = e.target.closest('#content a'); // limit to the #content area
if (link && link.getAttribute('href') != '#') {
e.stopPropagation();
}
}, true);