Если вы используете 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» и добавил родителя в качестве обеспечения безопасности, чтобы селектор не был слишком универсальным).