如何让油猴页面刷新脚本仅在标签页非活跃状态下运行?
解决方案:结合Page Visibility API实现标签页非活跃时自动刷新
直接用Page Visibility API就能满足你的需求,再配合visibilitychange事件监听标签页状态变化,能让脚本更灵活——活跃使用时停止刷新,切走标签页时自动启动,完美解决当前问题。
修改后的完整脚本
// ==UserScript== // @name Tony TIMS Refresh // @namespace TonyPony // @description Reload pages every 1 minute ONLY when tab is inactive // @version 0.3 // @match https://THE PAGE I WANT TO REFRESH // @grant none // ==/UserScript== (function() { 'use strict'; // 保存定时器ID,方便后续清除 let refreshTimer; // 核心逻辑:非活跃时启动刷新,活跃时停止 function handleRefresh() { // 清除旧定时器,避免重复触发 if (refreshTimer) { clearTimeout(refreshTimer); refreshTimer = null; } // 标签页非活跃时,设置1分钟后刷新 if (document.hidden) { refreshTimer = setTimeout(() => { location.reload(); }, 60 * 1000); } } // 页面加载后先判断初始状态 handleRefresh(); // 监听标签页可见性变化,状态切换时自动调整 document.addEventListener('visibilitychange', handleRefresh); })();
关键部分说明
document.hidden:Page Visibility API提供的属性,true代表标签页当前不可见(非活跃),false代表可见(活跃),直接用来判断状态。visibilitychange事件:标签页在活跃/非活跃状态切换时触发,确保脚本能实时响应你的操作——切走标签时启动刷新,切回来时立刻停止。- 定时器管理:每次状态变化先清除旧定时器,避免多个定时器叠加导致频繁刷新。
为什么不只用初始判断?
如果只在页面加载时判断一次document.hidden,中途切换标签页的话脚本不会自动调整行为。加上事件监听后,不管什么时候切换标签,脚本都能立刻做出对应反应。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

