Если вы используете Firefox , вам повезло, так как к вам относится следующий ответ. Если вы используете Chrome, вам гораздо меньше повезло, см. Нижнюю часть этого ответа.
Greasemonkey запускает пользовательские сценарии после загрузки DOM , поэтому вам не нужно реализовывать прослушиватель "DOM ready".
Также вы на Firefox, так что вы можете использовать некоторые современные конфеты: for...of
, let
.
Вот результирующий скрипт 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');
}
Благодаря let
отсутствию локальных объявлений, поэтому вам не нужно заключать вышеуказанный код в IIFE .
Для несчастных пользователей Chrome (Tampermonkey):
Ссылки не найдены во время выполнения скрипта, хотя document.readyState === 'complete'
... в результате вы должны реализовать некоторый цикл с таймером.
Таким образом, вы в конечном итоге:
// ==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');
}
})();
Обновление за октябрь 2018 года.
Из-за изменения разметки на странице Google его h3.r
необходимо изменить на div.r
.
Я пошел дальше и заменил h3.r > a
на #res .r > a
(заменил «tag.class» просто на «.class», и добавил родителя в качестве безопасности, чтобы селектор не был слишком универсальным).