JS возвращает элемент get без определения

#javascript #html #tampermonkey

Вопрос:

Я хочу изменить значения кнопок на странице с помощью Tampermonkey, но я не могу изменить его, потому что в нем говорится, что кнопка не определена?

HTML-часть

 <div class="playbackRateButtons">
  <span>Playback Speed : </span>
  <button class="btn blue" value="0.5">0.5X</button>
  <button class="btn blue" value="0.75">0.75X</button>
  <button class="btn blue active" value="1">1X</button>
  <button class="btn blue" value="1.25">1.25X</button>
  <button class="btn blue" value="1.5">1.5X</button>
</div>
 

Мой Скрипт Tampermonkey

 // ==UserScript==
// @name         Auto Change Speed
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *://xxxxxx/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant        GM_xmlhttpRequest
// @connect      xxxxxx.html
// ==/UserScript==

GM_xmlhttpRequest ( {
    method: "GET",
    url: "https://xxxxxx.html",
    onload: changeSpeed()
});

function changeSpeed(response) {
    var btns = document.getElementsByClassName("btn blue");
    var speed = ["1", "2", "3", "5", "10"];
    for (var i=0; i<5; i  ) {
        btns[i].value = speed[i];
        btns[i].innerHTML = speed[i] "X";
    }
}
 

Комментарии:

1. Являются ли рассматриваемые кнопки на веб-странице, на которой запускается этот скрипт? Если да, являются ли они частью источника HTML или они динамически добавляются сценариями на веб-странице?

2. Они являются частью исходного кода HTML.

3. Повторяется ли цикл for несколько раз, прежде чем создать ошибку, или он сразу же прерывается на первом элементе? (В чем заключается конкретное сообщение об ошибке?)

4.Это сообщения об ошибках в консоли. imgur.com/J3hxEg2 imgur.com/ITc7ohB И это сразу же вызывает ошибку по первому пункту.

Ответ №1:

Я изменил вашу changeSpeed функцию. Он пытается выбрать кнопки с интервалом в 1 секунду (возможно, вы захотите обновить этот интервал). Если найдено clearInterval , вызывается и выполняется остальная часть кода.

 function changeSpeed(response) {
    var intervalID = setInterval(function () {
        var btns = document.getElementsByClassName("btn blue");
        if (btns.length > 0) {
            clearInterval(intervalID);
            var speed = ["1", "2", "3", "5", "10"];
            for (var i = 0; i < btns.length; i  ) {
                btns[i].value = speed[i];
                btns[i].innerHTML = speed[i]   "X";
            }
        }
    }, 1000);
}