Javascript 当ctrl+;点击

Javascript 当ctrl+;点击,javascript,greasemonkey,tampermonkey,Javascript,Greasemonkey,Tampermonkey,使用Greasemonkey或Tampermonkey,我如何在按住Ctrl键并单击时在新选项卡的“打开”中列出同义词(即链接),或者在按住Shift键并单击时在新窗口中列出同义词?目前,它在同一选项卡中打开Ctrl+clicked和Strl+clicked链接。该网站通过附加不支持修改键的原始click处理程序,打破了标准链接行为,这是一件非常糟糕的事情 有时您可以使用jQuery('a')。关闭('click'),但通用方法是: 在站点附加自己的侦听器之前,在最顶层的DOM对象窗口上附加一个

使用Greasemonkey或Tampermonkey,我如何在按住Ctrl键并单击时在新选项卡的“打开”中列出同义词(即链接),或者在按住Shift键并单击时在新窗口中列出同义词?目前,它在同一选项卡中打开Ctrl+clicked和Strl+clicked链接。

该网站通过附加不支持修改键的原始
click
处理程序,打破了标准链接行为,这是一件非常糟糕的事情

有时您可以使用
jQuery('a')。关闭('click')
,但通用方法是:

  • 在站点附加自己的侦听器之前,在最顶层的DOM对象
    窗口上附加一个单击侦听器:使用
    @run at document start
    元数据键
  • 为addEventListener的useCapture参数指定
    true
    ,以便在捕获阶段的最开始从
    窗口
    到单击目标截取事件。因此,我们使用标准的非捕获侦听器,在站点侦听单击事件(可以是任何内容,从
    a
    window
    )的元素冒泡之前,额外增加了拦截的机会
  • 使用
    event.stopPropagation()
    防止随后连接的站点侦听器看到单击事件
  • 通过在目标链接
    href
    中通过
    #
    自动重定向跳过虚拟链接和/或将单击目标的CSS选择器限制在内容区域,保护基于合法链接的网站功能

  • 很好,但这也会破坏所需的菜单和按钮。您应该确定链接的范围以减少副作用。类似于
    if(例如,target.closest('.synonyms a'))
    。(特定于该站点)确实如此。在这种情况下,即使是
    #内容a
    也可以工作,但使用
    #
    -显然不需要检查它。@wOxxOm,太棒了,谢谢。这有什么副作用吗?好吧,你可能会对这个用户脚本上瘾,并允许它在更多的网站上运行…这个新问题似乎没有潜力像这个问题一样普遍有用,我已经有了一个现有的解决方案,所以我个人不感兴趣。
    // ==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);