Измените ссылки href с помощью событий onmousedown и click.

В основном, когда я делаю поиск в Яндексе, я получаю что-то вроде этого:

фильм,

Однако, когда я щелкаю правой кнопкой мыши и копирую ссылку, я получаю не настоящую ссылку, а более раннюю (ту, которая работает как промежуточная функция с функцией отслеживания моего клика перед перенаправлением на нужную ссылку).

Я пытаюсь написать скрипт, который удаляет эти ненужные ссылки. Вот что я попробовал:

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?

1 ответ

Прикрепить mousedown слушатель на window, самый верхний объект DOM, и укажите true параметр useCapture в addEventListener для перехвата события в самом начале фазы захвата из 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);
Другие вопросы по тегам