Kls673M 发表于 2024-4-11 11:20

网页定时刷新插件,可后台

本帖最后由 Kls673M 于 2024-7-1 08:15 编辑

忘记说了,这是浏览器的插件脚本,用油猴或者暴力猴新建脚本就可以了。

进入网页后按F7开启或者关闭,按键有提示,原始30秒刷新可自行修改。
4-19,增加个随机数,避免固定时间刷新

// ==UserScript==
// ==UserScript==
// @name         自动刷新插件
// @namespace    http://tampermonkey.net/
// @version      1.8
// @description自动刷新页面,如果页面空白则使用时间戳来避免缓存
// @author       You
// @match      *://*/*
// @grant      none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    // 定义基础刷新时间间隔(毫秒)
    const BASE_REFRESH_INTERVAL = 60 * 1000; // 30秒
    // 定义随机数的最大范围(毫秒)
    const RANDOM_MAX = 10 * 1000; // 10秒

    // 函数:生成随机刷新间隔
    function getRandomInterval() {
      return Math.floor(Math.random() * RANDOM_MAX) + 1; // 1ms 到 10秒之间的随机数
    }

    // 函数:检查页面是否空白
    function isPageBlank() {
      return document.body.innerText.trim() === '' && document.body.childNodes.length === 0;
    }

    // 函数:自动刷新页面
    function autoRefresh() {
      console.log("Auto-refresh triggered.");
      const refreshPage = () => {
            if (isPageBlank()) {
                console.log("Page is blank, refreshing with cache busting.");
                const currentUrl = window.location.href;
                const noCacheUrl = currentUrl + (currentUrl.indexOf('?') === -1 ? '?' : '&') + 'nocache=' + new Date().getTime();
                window.location.replace(noCacheUrl); // 使用时间戳刷新页面,避免缓存
            } else {
                console.log("Page is not blank.");
            }
      };
      refreshPage();
    }

    // 函数:开启或关闭自动刷新
    function toggleAutoRefresh() {
      const isAutoRefreshEnabled = window.name === 'autoRefreshEnabled';
      const button = document.getElementById('autoRefreshButton');
      if (isAutoRefreshEnabled) {
            window.name = ''; // 清除页面标识
            clearTimeout(window.autoRefreshTimeout); // 清除定时器
            button.textContent = '启用自动刷新';
      } else {
            window.name = 'autoRefreshEnabled'; // 设置页面标识
            autoRefresh(); // 立即刷新一次
            setRandomInterval(); // 设置随机刷新间隔
            button.textContent = '正在持续刷新中…';
      }
    }

    // 函数:设置随机刷新间隔
    function setRandomInterval() {
      const randomInterval = getRandomInterval();
      window.autoRefreshTimeout = setTimeout(autoRefresh, BASE_REFRESH_INTERVAL + randomInterval);
      console.log(`Next refresh in ${Math.floor(BASE_REFRESH_INTERVAL / 1000) + Math.floor(randomInterval / 1000)} seconds.`);
    }

    // 创建按钮并添加到页面
    const button = document.createElement('button');
    button.id = 'autoRefreshButton';
    button.textContent = window.name === 'autoRefreshEnabled' ? '正在持续刷新中…' : '启用自动刷新';
    button.style.position = 'fixed';
    button.style.bottom = '20px';
    button.style.right = '20px';
    button.style.zIndex = '10000';
    button.style.padding = '10px 20px';
    button.style.border = '1px solid #ccc';
    button.style.backgroundColor = '#f9f9f9';
    button.style.cursor = 'pointer';
    button.addEventListener('click', toggleAutoRefresh);
    document.body.appendChild(button);

    // 监听键盘事件,按下 F7 键时切换自动刷新状态
    document.addEventListener('keydown', function(event) {
      if (event.key === 'F7') {
            toggleAutoRefresh();
      }
    });

    // 页面加载时检查页面标识,并根据状态执行相应的操作
    if (window.name === 'autoRefreshEnabled') {
      setRandomInterval();
    }
})();

surepj 发表于 2024-4-11 12:51

我之前就是简单的3秒刷新
(function() {
    setTimeout(function(){
      location.reload();
    }, 3000); // 3秒后刷新页面
})();

lxhwan100 发表于 2024-4-11 11:24

感谢您分享您的思路和经验,让我从您的经验中受益匪浅。

jimixiaozi 发表于 2024-4-11 11:26

感谢分享

Marken888 发表于 2024-4-11 11:37

感谢分享原理,但还是用带UI的插件比较方便

Pwaerm 发表于 2024-4-11 11:42

写到background.js中更可靠

yufeng3754 发表于 2024-4-11 11:48

学习了,感谢分享

saltprune 发表于 2024-4-11 11:52

代码思路清晰,命名规范,有机会用下看看

kid12345kid 发表于 2024-4-11 12:03

感谢分享

huliuwa 发表于 2024-4-11 12:04

学习了,感谢分享
页: [1] 2 3 4 5 6
查看完整版本: 网页定时刷新插件,可后台