用户脚本恢复正常 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'),但通用的方法是:

  1. 在站点附加自己的侦听器之前,在最顶部的 DOM 对象 window 上附加点击侦听器:使用 @run-at document-start 元数据键。
  2. 为 addEventListener 的 useCapture 参数指定 true 以在 capturing 阶段开始时拦截事件window 到点击目标。因此,我们还增加了在 bubbles 之前拦截网站监听点击事件的元素的机会(可以是任何东西,从 awindow) 使用标准的非捕获侦听器。
  3. 使用 event.stopPropagation() 防止随后附加的站点侦听器看到点击事件。
  4. 通过在目标 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);