Anilist Auto Refresh on Session Expiry

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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);
})();