userscript для игры

342
09 мая 2019, 00:10

пишу юзерскрипт для игры... суть в следующем: нужно ожидать определенное количество времен, после чего обновить страницу и перейти по ссылке..

закинул в виде расширения в chrome.

на одной вкладке работает сносно.. но при открытии нескольких вкладок на какой-либо из вкладок может проскочить момент перехода по ссылке.. то есть обновление прошло, а перейти не успело - таймер пошел заново. в чем может заключаться проблема?

код скрипта

    function timer() {
    setTimeout(update, 2000);
}
function update() {
    localStorage.setItem("clickOnLink", "1");
    location.reload(true);
}

function FindByAttributeValue() {

    var All = document.getElementsByTagName("a");
    for (var i = 0; i < All.length; i++) {
        if (/\.*Персонаж\.*/.test(All[i].innerHTML)) {
            return All[i]
        }
    }
}
function goLink() {
    var link = FindByAttributeValue();
    if (link === undefined) {
        alert("Ссылка не найдена");
        timer();
    }
    localStorage.setItem("clickOnLink", "2");
    window.location.href = link.href;
}
window.onload = function () {
    var item = localStorage.getItem("clickOnLink");
    if (item === null) {
        timer();
    }
    localStorage.removeItem("clickOnLink");
    switch (item) {
        case "1":
            {
                goLink();
                break;
            }
        case "2":
            {
                timer();
                break;
            }
    }
}
Answer 1

Проблема заключается в том, что все вкладки используют один и тот же ключ "clickOnLink".

Если это функциональность нужна Вам работающей параллельно в нескольких табах браузера, есть вариант передавать этот флаг через url: #click1, #click2.

  function timer() {
    setTimeout(update, 2000);
}
function update() {
    var parts = location.href.split("#");
    location.href = parts[0] + "#click1";
    location.reload(true);
}
function FindByAttributeValue() {
    var All = document.getElementsByTagName("a");
    for (var i = 0; i < All.length; i++) {
        if (/\.*Персонаж\.*/.test(All[i].innerHTML)) {
            return All[i]
        }
    }
}
function goLink() {
    var link = FindByAttributeValue();
    if (link === undefined) {
        alert("Ссылка не найдена");
        timer();
    }
    window.location.href = link.href + "#click2";
}
window.onload = function () {
    var item = location.hash;
    if (item == "#click1") {
        goLink();
    } else {
        timer();
    }
}
READ ALSO
Непонятное поведение localStorage

Непонятное поведение localStorage

Пытаюсь сделать кеширование в localStorage, но что-то странное с ним происходитПо идее должен удалять все элементы кроме cacheBbbbbb cacheFfffff, но не удаляет...

178
Как вывести текст форм и div&#39;ов в alert

Как вывести текст форм и div'ов в alert

Доброй ночи! Нужна ваша помощь! Например, у меня есть форма, которая состоит из: Имя, Фамилия, Электронная почта, выпадающий список и 8 div'ов...

215
Как называется/реализовать sroll эффект?

Как называется/реализовать sroll эффект?

На сайте есть header, внутри которого есть list с якорями на секцииНеобходимо менять их состояние (цвет текста, ну или что - то другое), при достижении...

175