Greasy Fork

Greasy Fork is available in English.

强制缩放与桌面模式

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

当前为 2024-08-29 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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   http://greasyfork.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(); // 启用脚本并立即应用设置
    });
  }
});