Автоматическое нажатие кнопки b спустя время, после нажатия кнопки a

Есть такая вот кнопка

    function createTopBarButton() {
    const button = document.createElement("button")
    button.classList.add("button", "spoticon-notifications-16", "new-release-button")
    button.setAttribute("data-tooltip", BUTTON_NAME_TEXT)
    button.setAttribute("data-uri", "spotify:special:new-release")
    button.setAttribute('href','spotify:app:releases')
    return button
}

При нажатии она перекидывает на spotify:app:releases (далее SAR), хотя это и не единственная её задача. Стоит отметить, что она всегда закреплена в шапке, так что её можно нажать на любой странице, в том числе и на SAR.

Вторая кнопка находится на SAR, её нажатие нужно через 7 секунд, после нажатия первой кнопки. Но влезть в код SAR нет возможности. Поэтому, полагаю, задачу стоит решать при помощи той, первой кнопки. HTML код этой второй кнопки, нажатие которой нужно через 7 секунд:

введите сюда описание изображения

Она повешена на клавишу R. Так что подскажите пожалуйста, как сделать так, что бы спустя 7 секунд, после нажатия первой кнопки - автоматически нажималась клавиша R (которая в свою очередь уже активирует нажатие нужной кнопки)

Наверное, можно попробовать и решить при помощи.

document.querySelector(".SyncButton").click();

Но при вводе в консоль это срабатывало только если она была открыта уже на spotify:app:releases, а не раньше. Так что, не уверен насчет этого варианта.


Ответы (1 шт):

Автор решения: nick_n_a

Если у вас есть переход между страниц (а если бы не было, то думаю такого вопроса бы не было, т.к. это легко решилось бы через setTimeout), то я вам предлагаю воспользоваться тем, что способно хранить информацию. Само лучше - использовать href, или другой параметр внутри url. Если на url вы повлиять не можете - используйте куки для этого.

Алгоритм реализации (условно)

var my_reclick_protect;         // Защита от повторного срабатывания.
var timer_clickcounter = 0;
var my_reclick_inner = 0;
function my_2clicktimer(){
     var x = MyGetCookie("cookie_name1");
     if (x == my_reclick_protect) return; // Если повторно - отсекаем         
     if ((x) && (x != "")) {
         //Попалось
        if (timer_clickcounter++ <7) return;
        my_reclick_protect = x; // что б повторно не сработало
        MyDeleteCookie("cookie_name1"); // Или присвоить в куки пусто
        document.querySelector(".SyncButton").click();             
        }              
     }   

Проверочный таймер можно установить вот так setTimer( "my_2clicktimer()",1000); так как будут "проблемы" вроде неравномерного срабатывания, то прийдётся ставить таймер на 1 сек, и 7 тактов отсчитывать до слова "попалось" - отсекать событие 6 раз, а на 7-мой пропускать. Потому что при работе таймера если юзверь кликнет на 5-той секунде после последнего срабатывания 7-секундного таймера, то следующий тик будет через 2 секунды, и сработает раньше чем надо. Если нужно учесть "время загрузки страницы", то тогда прийдется синхронизироваться "по часам", часы можно узнать new Date(), тогда в куки можно записывать время клика, например.

При нажатии на кнопку 1 прийдётся в куки записать рандомное значение либо дату. Будет что-то вроде

 function mybutton1_click() {
    MySetCookie("cookie_name1", (new Date()));
    my_reclick_inner = 1;
    }

Если с "пробросом" первой кнопки всё туго (хотя click должен срабатывать раньше чем href переход) то есть варианты, а)добавить код в submit (если используется форма), а на крайний случай - добавить "проброшеную" кнопку, а оригинальную скрыть или сделать "однопиксельной" и кликать через "click()".

По поводу cookie, для них не договорились о встроеной "поддержке" браузером, нужно использовать или jQuery $.cookie("myCooke") и $.cookie("myCooke", "yjdjt pyfxtybt") или плагин, или взять готовую функцию написаную на javascript , зависит от того какие библиотеки вы использовали (document.cookie хранит все куки, напрямую с ним работать можно но сложно). Если куки нельзя использовать - выход - location.href и модифицировать переход - записывать "переменную" в урл перехода.

Таймер вполне может сработать до перехода на новую страницу, поэтому я добавил проверку что бы до 7 раз считало, имя ввиду то что за 7 секунд уже новая страница прогрузится, если это не произошло - я добавил флаг "my_reclick_inner", который будет 1 если переход не произошёл. Тут ещё есть "граничный" случай, например что старая страница активна 8 секунд, а новая загрузится на 9-той, нужно ли это учитывать - надо подумать. Эксперементально думаю этот костяк уже можно заставить работать.


UDP: Как решить через setTimeout

    function mybutton1_click() {
             window.setTimeout('document.querySelector(".SyncButton").click();',7000);
       // Возможно добавить проброс 
       }

Это будет работать только если не происходит после нажатия кнопки переход на другую страницу.

→ Ссылка