1

基本上,当我在 Yandex 中进行搜索时,我会得到如下信息:

图片.

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

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

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()给了我正确的链接,但我现在不知道如何“进步”以用href干净的链接替换搜索结果的 s 。

bindEventListeners()正如它所说,绑定将在搜索结果正文部分实现点击时触发的侦听器。获取点击的搜索结果对我很有用id,只是为了让链接偏离我需要的链接。例如,用户点击带有 index 的搜索结果3,我会这样做var search_3 = getRealLinks()[3]

如何用 JavaScript 中的干净链接替换您可以看到的那些链接?

4

1 回答 1

3

在最顶层的 DOM 对象上附加一个mousedown侦听器,并为addEventListeneruseCapture参数指定以在捕获阶段一开始就拦截从到单击目标的事件。也就是说,我们的代码将在目标的.windowtruewindowonmousedown

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

window.addEventListener('mousedown', event => {
    const a = event.target.closest('a');
    if (a) {
        a.onmousedown = null;
    }
}, true);
于 2017-03-27T03:36:05.887 回答