强制缩放与桌面模式

浏览器ua为手机ua时启用强制缩放,浏览器ua非手机ua时启用桌面模式,脚本菜单可以单独设置桌面模式宽度或全局宽度


Install this script?
  1. // ==UserScript==// @name 强制缩放与桌面模式// @author Lemon399// @description 浏览器ua为手机ua时启用强制缩放,浏览器ua非手机ua时启用桌面模式,脚本菜单可以单独设置桌面模式宽度或全局宽度// @match *://*/*// @exclude https://sj.qq.com/*// @grant GM_registerMenuCommand// @grant GM_setValue// @grant GM_getValue// @grant GM_unsetValue// @version 9.2// @run-at document-start// @namespace https://gfork.dahi.icu/users/452911// ==/UserScript==const domain = window.location.hostname;let globalViewportWidth = GM_getValue('globalViewportWidth', 1080);let viewportWidth = GM_getValue(`viewportWidth_${domain}`, globalViewportWidth);let userAgent = navigator.userAgent;// 检查脚本是否启用let scriptEnabled = GM_getValue('scriptEnabled', true);function setViewportWidth(width) {viewportWidth = width;GM_setValue(`viewportWidth_${domain}`, width); // 将视口宽度与域名关联存储autoChangeScale(); // 更新视口宽度后自动调整缩放比例}function setGlobalViewportWidth(width) {globalViewportWidth = width;GM_setValue('globalViewportWidth', width); // 设置全局视口宽度if (!GM_getValue(`viewportWidth_${domain}`)) {viewportWidth = width; // 更新当前网站的视口宽度,如果未单独设置过}autoChangeScale();}function autoChangeScale() {if (!scriptEnabled) return; // 如果脚本禁用,则不执行缩放调整const metaTag = document.querySelector('meta[name=viewport]');if (metaTag) {const isMobile =userAgent.indexOf('Mobile') < 0 &&userAgent.indexOf('SymbianOS') < 0 &&userAgent.indexOf('SearchCraft') < 0;metaTag.setAttribute('content', isMobile ? `width=${viewportWidth}` : 'width=device-width,initial-scale=1.0,maximum-scale=10.0,user-scalable=1');}}autoChangeScale();//监听url变化执行history.pushState = ( f => function pushState(){var ret = f.apply(this, arguments);window.dispatchEvent(new Event('pushstate'));window.dispatchEvent(new Event('urlchange'));return ret;})(history.pushState);history.replaceState = ( f => function replaceState(){var ret = f.apply(this, arguments);window.dispatchEvent(new Event('replacestate'));window.dispatchEvent(new Event('urlchange'));return ret;})(history.replaceState);window.addEventListener('popstate',()=>{window.dispatchEvent(new Event('urlchange'))});window.addEventListener('urlchange', function(event) {window.setTimeout(autoChangeScale, 100);});//双指执行document.addEventListener('touchmove', function(e) {if (e.touches.length > 1) {autoChangeScale();}});//监听宽度变化const mediaQuery = window.matchMedia(`(width: ${viewportWidth}px)`);function handleViewportChange(event) {if (!event.matches) {autoChangeScale();}}mediaQuery.addEventListener('change', handleViewportChange);handleViewportChange(mediaQuery);// 添加菜单命令GM_registerMenuCommand('设置此网站视口宽度', function() {const inputWidth = prompt('请输入视口宽度:', viewportWidth);if (inputWidth) {const parsedWidth = parseInt(inputWidth, 10);if (!isNaN(parsedWidth)) {setViewportWidth(parsedWidth);} else {alert('输入的宽度无效,请输入一个有效的数字!');}}});GM_registerMenuCommand('设置全局视口宽度', function() {const inputWidth = prompt('请输入全局视口宽度:', globalViewportWidth);if (inputWidth) {const parsedWidth = parseInt(inputWidth, 10);if (!isNaN(parsedWidth)) {setGlobalViewportWidth(parsedWidth);} else {alert('输入的宽度无效,请输入一个有效的数字!');}}});// 启用/禁用脚本菜单命令GM_registerMenuCommand(scriptEnabled ? '在此网站禁用' : '在此网站启用', function() {scriptEnabled = !scriptEnabled;GM_setValue('scriptEnabled', scriptEnabled);if (scriptEnabled) {autoChangeScale(); // 启用脚本并立即应用设置GM_registerMenuCommand('在此网站禁用', function() {GM_setValue('scriptEnabled', false);location.reload(); // 禁用脚本并刷新页面});} else {GM_registerMenuCommand('在此网站启用', function() {GM_setValue('scriptEnabled', true);autoChangeScale(); // 启用脚本并立即应用设置});}});