Greasy Fork is available in English.

定时刷新

如题

질문, 리뷰하거나, 이 스크립트를 신고하세요.
// ==UserScript==
// @name         定时刷新
// @namespace    https://czm.cool
// @version      1.1
// @description  如题
// @author       czm
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==
// 修改自https://greasyfork.org/zh-CN/scripts/39506-%E8%87%AA%E5%8A%A8%E5%88%B7%E6%96%B0%E9%A1%B5%E9%9D%A2
(function() {
    'use strict';

    var time = parseInt(sessionStorage.refreshTime), originTitle = document.title, lastSetTime = parseInt(sessionStorage.lastSetTime);

    // 循环时间
    function loop() {
        if (isNaN(time) || !(sessionStorage.enable == 'true')) return;
        document.title = "[" + formatTime(time) + "] " + originTitle;
        if (time <= 0) {
            location.reload();
            return;
        }
        time--;
        setTimeout(loop, 1000);
    }

    // 格式化时间
    function formatTime(t) {
        if (isNaN(t)) return "";
        var s = "";
        var h = parseInt(t / 3600);
        s += (pad(h) + ":");
        t -= (3600 * h);
        var m = parseInt(t / 60);
        s += (pad(m) + ":");
        t -= (60 * m);
        s += pad(t);
        return s;
    }

    // 补零
    function pad(n) {
        return ("00" + n).slice(-2);
    }

    // 创建按钮
    var button = document.createElement('button');
    button.textContent = '⏱️';
    button.style.position = 'fixed';
    button.style.bottom = '10px';
    button.style.right = '10px';
    button.style.zIndex = '9999';
    button.style.width = '50px';
    button.style.height = '50px';
    button.style.borderRadius = '50%';
    button.style.backgroundColor = '#007bff';
    button.style.border = 'none';
    button.style.outline = 'none';
    button.style.color = 'white';
    button.style.fontSize = '24px';
    button.style.cursor = 'pointer';
    button.style.boxShadow = '0 2px 5px rgba(0, 0, 0, 0.3)';

    // 创建配置面板
    var panel = document.createElement('div');
    panel.style.position = 'fixed';
    panel.style.bottom = '70px';
    panel.style.right = '10px';
    panel.style.display = 'none';
    panel.style.zIndex = '9999';
    panel.style.padding = '15px';
    panel.style.backgroundColor = '#fff';
    panel.style.borderRadius = '8px';
    panel.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.2)';
    panel.style.transition = 'all 0.3s ease';

    // 输入框
    var refreshInput = document.createElement('input');
    refreshInput.type = 'number';
    refreshInput.value = isNaN(lastSetTime) ? 60 : lastSetTime;
    refreshInput.style.width = '50px';
    refreshInput.style.marginRight = '10px';
    refreshInput.style.padding = '5px';
    refreshInput.style.borderRadius = '4px';
    refreshInput.style.border = '1px solid #ddd';

    // 单位选择
    var unitSelectInput = document.createElement('select');
    var options = [{text: '秒', value: 1}, {text: '分', value: 60}, {text: '时', value: 360}];
    options.forEach(item => {
        var option = document.createElement('option');
        option.value = item.value;
        option.textContent = item.text;
        if (sessionStorage.factor == item.value) {
            option.selected = true;
        } else if (item.value === 1) {
            option.selected = true;
        }
        unitSelectInput.appendChild(option);
    })

    // 设置按钮
    var setButton = document.createElement('button');
    setButton.textContent = '设置';
    setButton.style.padding = '5px 10px';
    setButton.style.borderRadius = '4px';
    setButton.style.border = 'none';
    setButton.style.backgroundColor = '#28a745';
    setButton.style.color = 'white';
    setButton.style.cursor = 'pointer';
    setButton.style.outline = 'none';
    setButton.style.boxShadow = 'inset 0 -2px 0 rgba(0, 0, 0, 0.2)';

    // 开始刷新按钮
    var startButton = document.createElement('button');
    startButton.textContent = '开始';
    startButton.style.padding = '5px 10px';
    startButton.style.borderRadius = '4px';
    startButton.style.border = 'none';
    startButton.style.backgroundColor = '#17a2b8';
    startButton.style.color = 'white';
    startButton.style.cursor = 'pointer';
    startButton.style.outline = 'none';
    startButton.style.boxShadow = 'inset 0 -2px 0 rgba(0, 0, 0, 0.2)';
    startButton.style.marginRight = '10px';

    // 关闭刷新按钮
    var stopButton = document.createElement('button');
    stopButton.textContent = '结束';
    stopButton.style.padding = '5px 10px';
    stopButton.style.borderRadius = '4px';
    stopButton.style.border = 'none';
    stopButton.style.backgroundColor = '#dc3545';
    stopButton.style.color = 'white';
    stopButton.style.cursor = 'pointer';
    stopButton.style.outline = 'none';
    stopButton.style.boxShadow = 'inset 0 -2px 0 rgba(0, 0, 0, 0.2)';

    // 第一行
    var row1 = document.createElement('div');
    row1.appendChild(refreshInput);
    row1.appendChild(unitSelectInput)
    row1.appendChild(setButton);

    // 第二行
    var row2 = document.createElement('div');
    row2.style.marginTop = '10px';
    row2.appendChild(startButton);
    row2.appendChild(stopButton);

    // 将行添加到面板
    panel.appendChild(row1);
    panel.appendChild(row2);

    // 将按钮和面板添加到页面
    document.body.appendChild(button);
    document.body.appendChild(panel);

    // 按钮点击事件
    button.onclick = function() {
        panel.style.display = panel.style.display === 'none' ? 'block' : 'none';
    };

    // 设置刷新时间
    setButton.onclick = function() {
        setTimeValue();
    }

    // 开始刷新
    startButton.onclick = function() {
        setTimeValue(true);
        loop()
    };

    function setTimeValue(enable) {
        var factor = unitSelectInput.value
        sessionStorage.factor = factor
        sessionStorage.refreshTime = refreshInput.value * factor;
        sessionStorage.lastSetTime = refreshInput.value;
        sessionStorage.enable = enable == undefined || enable == null ? sessionStorage.enable : enable
        time = refreshInput.value * factor;
    }

    // 结束刷新
    stopButton.onclick = function() {
        sessionStorage.refreshTime = undefined;
        sessionStorage.enable = false;
        time = undefined;
        document.title = originTitle;
    }

    // 刷新后开始新一轮计时
    loop()

})();