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