Anilist Auto Refresh on Session Expiry

Refresh the page if session expired message appears and the page is focused

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Anilist Auto Refresh on Session Expiry
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Refresh the page if session expired message appears and the page is focused
// @author       werapi
// @match        *://anilist.co/*
// @grant        none
// @license      GNU GPLv3
// ==/UserScript==

(function() {
    'use strict';

    const elementSelector = 'div.el-message.el-message--error.is-closable';
    const textToFind = 'Session expired, please refresh';

    function checkForElement() {
        const elements = document.querySelectorAll(elementSelector);
        for (const element of elements) {
            if (element.textContent.includes(textToFind)) {
                if (document.hasFocus()) {
                    location.reload();
                }
                break;
            }
        }
    }
    
    // Observer to check when page changes
    const observer = new MutationObserver((mutations) => {
        for (const mutation of mutations) {
            if (mutation.type === 'childList' || mutation.type === 'subtree') {
                checkForElement();
            }
        }
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // Initial check in case the element is already present
    checkForElement();

    // Add event listener to check when the page gains focus, as the observer will not trigger the refresh if not focussed as to not DOS the anilist servers.
    window.addEventListener('focus', checkForElement);
})();