{{htmlmetatags>metatag-robots=() metatag-keywords=(open code,openchamber, 浏览器常亮,via 浏览器,脚本插件) metatag-description=(介绍在使用 open code 和 openchamber 工具时,通过在 via 浏览器添加脚本实现浏览器常亮的方法) metatag-media-og:image=(:wiki:image.jpg) metatag-og:description=(关于在手机远程 vibe code 时解决浏览器自动锁屏问题的方案) metatag-og:any=(分享利用 via 浏览器脚本插件保持屏幕常亮的技巧) }} ====== 用opencode或者openchamber的时候如何让手机常亮 ====== 最近在手机上远程vibe code,使用了open code和 openchamber工具,但是有一个问题,手机放在桌上查看进度的时候,老是自动锁屏。 经过测试,via浏览器比较好的支持了脚本插件,可以支持自动持续亮屏,而且缩小via浏览器到后台之后,自动息屏。非常满足需求。 如果是部分手机,可能对部分前台APP会强制杀死,请手动给 app加一个免杀的锁,不然长时间运行可能会被自动杀死。 我们可以在via浏览器 加入如下脚本: // ==UserScript== // @name 996996.xyz 自动屏幕常亮 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 在可见时保持常亮,切到后台或关闭标签页时立即释放,允许系统正常息屏 // @author YourName // @match *://*.996996.xyz/* // @grant none // @run-at document-end // ==/UserScript== (function() { 'use strict'; if (!('wakeLock' in navigator)) { console.warn('当前浏览器或协议(需HTTPS)不支持 Wake Lock API'); return; } let wakeLock = null; // 请求常亮锁 async function requestWakeLock() { if (wakeLock !== null) return; // 已有锁,不重复请求 try { wakeLock = await navigator.wakeLock.request('screen'); console.log('====== [WakeLock] 屏幕常亮已激活 ======'); wakeLock.addEventListener('release', () => { console.log('[WakeLock] 锁已释放'); wakeLock = null; }); } catch (err) { console.error(`[WakeLock] 激活失败: ${err.name}, ${err.message}`); } } // 主动释放常亮锁 async function releaseWakeLock() { if (wakeLock !== null) { await wakeLock.release(); wakeLock = null; console.log('====== [WakeLock] 已主动释放锁,允许系统息屏 ======'); } } // 1. 初始化执行 requestWakeLock(); // 2. 核心修复:监听前后台切换状态 document.addEventListener('visibilitychange', async () => { if (document.visibilityState === 'visible') { // 回到前台,重新申请常亮 await requestWakeLock(); } else { // 切到后台/切到桌面,立刻释放锁,允许手机正常息屏 await releaseWakeLock(); } }); // 3. 移动端手势兜底(防止部分浏览器阻止无交互的自动请求) const triggerEvents = ['click', 'touchstart']; const handleGesture = async () => { await requestWakeLock(); if (wakeLock !== null) { triggerEvents.forEach(event => document.removeEventListener(event, handleGesture)); } }; triggerEvents.forEach(event => document.addEventListener(event, handleGesture)); })();