通过 `onmousedown`、`click` 事件更改 `href` 的链接

Posted

技术标签:

【中文标题】通过 `onmousedown`、`click` 事件更改 `href` 的链接【英文标题】:Change `href`s links via `onmousedown`,`click` events 【发布时间】:2017-03-26 15:10:55 【问题描述】:

基本上,当我在 Yandex 中执行 a search 时,我会得到如下信息:

但是,当我右键单击并复制链接时,我没有获得真正的链接,而是获得了垃圾链接(在重定向到我想要的链接之前,它具有跟踪我的点击功能的中间功能)。

我正在尝试编写一个脚本来删除那些垃圾链接。这是我尝试过的:

function decodeURL(str) 
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));


function getRealLinks() 
    var classes = document.getElementsByClassName('organic typo typo_text_m typo_line_s'); // gets any search result

    var cleanLinks = new Array(); // we'll store any clean link to this array

    for (i = 0; i < classes.length; i++) 
        var html = classes[i].innerHTML; // we get part of the inner html of the selected search result
        var pattern = /(url=(.*?))(?=&amp;\w+=)/; // with this regex we'll match the url
        var match = pattern.exec(html); // attempt matching pattern
        cleanLinks.push(decodeURL(match[2])); // decode the url, then push the match to the array
    

    console.log(cleanLinks);


function bindEventListeners() 
    var lis = document.getElementsByTagName('li'); // search results have `li` selector

    for (var i = 0; i < lis.length; i++)  // iterate every element
      (function(i) 
        lis[i].addEventListener('click', function()  // add a listener to the current element
          alert(this.dataset.cid); // each result has an id (by default between 0-9)
        , false);
      )(i);
    


bindEventListeners();

getRealLinks() 为我提供了正确的链接,但我现在不知道如何“进行”以将搜索结果的 hrefs 替换为干净的链接。

bindEventListeners() 被称为绑定侦听器,当在搜索结果正文部分实现点击时将触发该侦听器。获得点击的搜索结果的id 对我很有用,只是为了让链接偏离我需要的链接。比如用户点击索引为3的搜索结果,我就做var search_3 = getRealLinks()[3]

如何将您可以看到的那些链接替换为 javascript 中的干净链接?

【问题讨论】:

我也尝试了this code 的部分内容,但它甚至不起作用。 仅供参考:Google search link fix:适用于 Google 和 Yandex。适用于 Chrome 和 Firefox。 【参考方案1】:

在最顶层的 DOM 对象 window 上附加一个 mousedown 侦听器,并为 addEventListener 的 useCapture 参数指定 true 以在捕获开始时拦截事件从window 到点击目标的阶段。也就是说,我们的代码将在目标的onmousedown 之前运行。

// ==UserScript==
// @name     Defluff yandex links
// @include  *://yandex.*/*
// ==/UserScript==

window.addEventListener('mousedown', event => 
    const a = event.target.closest('a');
    if (a) 
        a.onmousedown = null;
    
, true);

【讨论】:

我一直在寻找这样的东西。这也适用于 Google。

以上是关于通过 `onmousedown`、`click` 事件更改 `href` 的链接的主要内容,如果未能解决你的问题,请参考以下文章

<script> function click() if (event.button==2) alert('你想看什麽?') document.onmousedow

vue中解决拖动和点击事件的冲突

ext js禁用onmousedown

js中鼠标事件总结

Unity事件函数OnMouseDown生效条件

JavaScript 事件类型