Jeśli korzystasz z przeglądarki Firefox , masz szczęście, ponieważ dotyczy Ciebie poniższa odpowiedź. Jeśli używasz Chrome, masz dużo mniej szczęścia, patrz na dole tej odpowiedzi.
Greasemonkey uruchamia skrypty użytkownika po załadowaniu DOM , więc nie trzeba implementować detektora „DOM ready”.
Jesteś także w przeglądarce Firefox, więc możesz użyć nowoczesnych cukierków: for...of
, let
.
Oto wynikowy skrypt Greasemonkey:
// ==UserScript==
// @name Remove Google redirects
// @namespace google
// @description Remove redirects from Google Search result links.
// @include https://www.google.*/*
// @version 1
// @grant none
// ==/UserScript==
for (let element of document.querySelectorAll('#res .r > a')) {
element.removeAttribute('onmousedown');
}
Dzięki temu let
nie ma lokalnych deklaracji, dlatego nie trzeba umieszczać powyższego kodu w IIFE .
Dla niefortunnych użytkowników Chrome (Tampermonkey):
W czasie wykonywania skryptu nie znaleziono linków, mimo że document.readyState === 'complete'
… w rezultacie musisz zaimplementować pętlę z timerem.
Dlatego kończysz na:
// ==UserScript==
// @name Remove Google redirects
// @namespace google
// @description Remove redirects from Google Search result links.
// @include https://www.google.*/*
// @version 1
// @grant none
// ==/UserScript==
(function removeGoogleRedirects() {
var links = document.querySelectorAll('#res .r > a');
if (links.length === 0) {
setTimeout(removeGoogleRedirects, 100);
return;
}
for (var link of links) {
link.removeAttribute('onmousedown');
}
})();
Aktualizacja z października 2018 r .:
Ze względu na zmianę znaczników na stronie Google h3.r
należy zmienić na div.r
.
Poszedłem dalej i zastąpione h3.r > a
z #res .r > a
(zastąpiony „tag.class” z zaledwie „Klasy” i dodał rodzica jako zabezpieczenie tak, że selektor nie jest zbyt ogólne).