🎉 欢迎访问GreasyFork.Org 镜像站!本镜像站由公众号【爱吃馍】搭建,用于分享脚本。联系邮箱📮

Greasy fork 爱吃馍镜像

强制缩放与桌面模式

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

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

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