LINUX.ORG.RU

Почему скрипт сам запускается?

 , ,


0

1

Сделал такой скрипт для TamperMonkey:

// ==UserScript==
// @name         Вниз
// @namespace    http://tampermonkey.net/
// @version      2026-08-20
// @description  Вниз
// @author       You
// @match        https://...
// @grant        GM_registerMenuCommand
// ==/UserScript==

(function() {
    'use strict';

    let makeScroll = null;
    const step = 500;
    const pause = 100; // мс

    function scrollByX() {
        if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
            clearInterval(makeScroll);
            makeScroll = null;
            console.log("Отмена прокрутки -- уже внизу.");
        } else {
            window.scrollBy(0, step);
            console.log("На", step, "вниз");
        }
    };

    function startRolling () {
        console.log("Запускаю прокрутку");
        if (makeScroll) {
            clearInterval(makeScroll);
            makeScroll = null;
            console.log("Отмена прокрутки -- уже шла.");
        } else {
            makeScroll = setInterval( scrollByX, pause);
            console.log("Прокрутка запущена");
        }
    }

    GM_registerMenuCommand("Прокрутить вниз", startRolling );
    window.addEventListener('keydown', function(event) {
        if (event.altKey && event.code === 'KeyZ') {
            startRolling();
            console.log("Alt-Z");
        }
    } );
})();

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

Как я понимаю, при загрузке страницы makeScroll — null, и прокрутка не должна начаться, пока я не запущу скрипт из меню или не нажму Alt-Z. Тогда почему при перезагрузке страницы она сразу начинает скроллиться?

ОТВЕТ: Лишние () в GM_registerMenuCommand. Исправил.

★★★★★

Последнее исправление: question4 (всего исправлений: 2)

GM_registerMenuCommand(«Прокрутить вниз», startRolling() );

GM_registerMenuCommand("Прокрутить вниз", startRolling); // Сюда коллбек надо передать, а ты тут сразу сам метод дергаешь
hippi90 ★★★★★
()
Последнее исправление: hippi90 (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария