Se você estiver usando o Firefox , terá sorte, pois a seguinte resposta se aplica a você. Se você está usando o Chrome, você tem menos sorte, veja o final desta resposta.
O Greasemonkey dispara os scripts de usuário assim que o DOM é carregado , portanto, você não precisa implementar um ouvinte "DOM ready" .
Você também está no Firefox, então você pode usar alguns doces modernos: for...of
, let
.
Aqui está o script Greasemonkey resultante:
// ==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');
}
Graças ao let
, não há declarações locais, portanto, não é necessário incluir o código acima em IIFE .
Para os desafortunados usuários do Chrome (Tampermonkey):
Links não são encontrados no momento em que o script é executado, mesmo que document.readyState === 'complete'
… como resultado você tenha que implementar algum loop com timer.
Portanto, você acaba com:
// ==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');
}
})();
Atualização de outubro de 2018:
Devido a uma alteração de marcação na página do Google, o h3.r
precisou ser alterado para div.r
.
Eu fui mais longe e substituí h3.r > a
com #res .r > a
(substituído "tag.class" por apenas ".class", e adicionei um pai como uma segurança para que o seletor não seja muito genérico).