- // ==UserScript==
- // @name Switch UserAgent MOD
- // @name:zh-CN User Agent自由切
- // @namespace https://gf.qytechs.cn/zh-CN/scripts/490763-switch-useragent-mod
- // @version 0.1.13
- // @description 根据不同的网址或域名,使用不同的 User Agent。
- // @description:zh-CN 根据不同的网址或域名,使用不同的 User Agent。
- // @author 咕德
- // @license MIT
- // @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDEwIiBoZWlnaHQ9IjQwNCIgdmlld0JveD0iMCAwIDQxMCA0MDQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0zOTkuNjQxIDU5LjUyNDZMMjE1LjY0MyAzODguNTQ1QzIxMS44NDQgMzk1LjMzOCAyMDIuMDg0IDM5NS4zNzggMTk4LjIyOCAzODguNjE4TDEwLjU4MTcgNTkuNTU2M0M2LjM4MDg3IDUyLjE4OTYgMTIuNjgwMiA0My4yNjY1IDIxLjAyODEgNDQuNzU4NkwyMDUuMjIzIDc3LjY4MjRDMjA2LjM5OCA3Ny44OTI0IDIwNy42MDEgNzcuODkwNCAyMDguNzc2IDc3LjY3NjNMMzg5LjExOSA0NC44MDU4QzM5Ny40MzkgNDMuMjg5NCA0MDMuNzY4IDUyLjE0MzQgMzk5LjY0MSA1OS41MjQ2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyKSIvPgo8cGF0aCBkPSJNMjkyLjk2NSAxLjU3NDRMMTU2LjgwMSAyOC4yNTUyQzE1NC41NjMgMjguNjkzNyAxNTIuOTA2IDMwLjU5MDMgMTUyLjc3MSAzMi44NjY0TDE0NC4zOTUgMTc0LjMzQzE0NC4xOTggMTc3LjY2MiAxNDcuMjU4IDE4MC4yNDggMTUwLjUxIDE3OS40OThMMTg4LjQyIDE3MC43NDlDMTkxLjk2NyAxNjkuOTMxIDE5NS4xNzIgMTczLjA1NSAxOTQuNDQzIDE3Ni42MjJMMTgzLjE4IDIzMS43NzVDMTgyLjQyMiAyMzUuNDg3IDE4NS45MDcgMjM4LjY2MSAxODkuNTMyIDIzNy41NkwyMTIuOTQ3IDIzMC40NDZDMjE2LjU3NyAyMjkuMzQ0IDIyMC4wNjUgMjMyLjUyNyAyMTkuMjk3IDIzNi4yNDJMMjAxLjM5OCAzMjIuODc1QzIwMC4yNzggMzI4LjI5NCAyMDcuNDg2IDMzMS4yNDkgMjEwLjQ5MiAzMjYuNjAzTDIxMi41IDMyMy41TDMyMy40NTQgMTAyLjA3MkMzMjUuMzEyIDk4LjM2NDUgMzIyLjEwOCA5NC4xMzcgMzE4LjAzNiA5NC45MjI4TDI3OS4wMTQgMTAyLjQ1NEMyNzUuMzQ3IDEwMy4xNjEgMjcyLjIyNyA5OS43NDYgMjczLjI2MiA5Ni4xNTgzTDI5OC43MzEgNy44NjY4OUMyOTkuNzY3IDQuMjczMTQgMjk2LjYzNiAwLjg1NTE4MSAyOTIuOTY1IDEuNTc0NFoiIGZpbGw9InVybCgjcGFpbnQxX2xpbmVhcikiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjYuMDAwMTciIHkxPSIzMi45OTk5IiB4Mj0iMjM1IiB5Mj0iMzQ0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiM0MUQxRkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkQzNEZFIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhciIgeDE9IjE5NC42NTEiIHkxPSI4LjgxODE4IiB4Mj0iMjM2LjA3NiIgeTI9IjI5Mi45ODkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZGRUE4MyIvPgo8c3RvcCBvZmZzZXQ9IjAuMDgzMzMzMyIgc3RvcC1jb2xvcj0iI0ZGREQzNSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRkE4MDAiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K
- // @match *://*/*
- // @grant none
- // ==/UserScript==
-
- (function () {
- 'use strict';
-
- const builtInUaList = {
- 'Chrome-Win': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
- 'Chrome-Mac': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
- 'Chrome-Linux': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
- 'Firefox-Win': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0',
- 'Firefox-Mac': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11.5; rv:89.0) Gecko/20100101 Firefox/89.0',
- 'Firefox-Linux': 'Mozilla/5.0 (X11; Linux i686; rv:89.0) Gecko/20100101 Firefox/89.0',
- 'Safari-Mac': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15',
- 'Edge-Win': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64',
- 'Opera-Win': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 OPR/77.0.4054.270',
- 'Baidu-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 Baidu/11.19.0.11 (Baidu; P1 11) ADID/89376E18-7502-4427-813E-37468C7993F7; BD_UPID/6875767077; BD_SID/8136531732; BD_UID/1042843693; BD_HDID/8c708d6616ad78f5052739f36626f8a5; BD_W_SAVE_TIME/1634504603050',
- 'Baidu-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 Baidu/11.19.0.11 (Baidu; P2 11) ADID/89376E18-7502-4427-813E-37468C7993F7; BD_UPID/6875767077; BD_SID/8136531732; BD_UID/1042843693; BD_HDID/8c708d6616ad78f5052739f36626f8a5; BD_W_SAVE_TIME/1634504603050',
- 'bili-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 BiliApp/119926 (build 11992600) Android2108261144 Channel/bilih5 wvcore/119926',
- 'bili-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 BiliApp/119926 (build 11992600) iOS2108261144 Channel/bilih5 wvcore/119926',
- 'CSDN-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 NewsArticle/8.4.12 NetType/WIFI',
- 'CSDN-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 NewsArticle/8.4.12 NetType/WIFI',
- 'QQ-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 MMWEBID/4471 MicroMessenger/8.0.15.2020(0x28000F35) Process/tools WeChat/arm64',
- 'QQ-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 MicroMessenger/8.0.15(0x18000f2d) NetType/WIFI Language/zh_CN',
- 'SMZDM-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 NewsArticle/7.12.1 NetType/WIFI',
- 'SMZDM-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 NewsArticle/7.12.1 NetType/WIFI',
- 'WeChat-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 MMWEBID/4471 WeChat/8.0.15.2020(0x28000F35) Process/tools web WeChat/arm64',
- 'WeChat-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 WeChat/8.0.15(0x18000f2d) NetType/WIFI Language/zh_CN',
- 'Weibo-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 Weibo (20201126104340)',
- 'Weibo-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 Weibo (iPhone13,4__weibo__10.10.1__iphone__os14.8)',
- 'Zhihu-Android': 'Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 Mobile Safari/537.36 NewsArticle/7.12.1 NetType/WIFI',
- 'Zhihu-iOS': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15A372 NewsArticle/7.12.1 NetType/WIFI',
- };
-
- const builtInUrlUaMap = {
- 'baidu.com': 'Baidu-Android',
- 'zhihu.com': 'Zhihu-Android',
- 'weibo.com': 'Weibo-Android',
- 'bilibili.com': 'bili-Android',
- 'smzdm.com': 'SMZDM-Android',
- };
-
- const customUaList = {};
- const customUrlUaMap = {};
-
- const language = navigator.language || navigator.userLanguage;
- const languageCode = language.split('-')[0];
- const languageMap = {
- 'zh-CN': '简体中文',
- 'en': 'English',
- };
- const languageText = languageMap[languageCode] || 'English';
-
- const storageKey = 'SwitchUserAgentMOD';
- let storageData = {};
-
- const uaList = Object.assign({}, builtInUaList, customUaList);
- const urlUaMap = Object.assign({}, builtInUrlUaMap, customUrlUaMap);
-
- const init = () => {
- loadStorage();
- applyUserAgent();
- };
-
- const loadStorage = () => {
- const data = JSON.parse(localStorage.getItem(storageKey) || '{}');
- customUaList = data.customUaList || {};
- customUrlUaMap = data.customUrlUaMap || {};
- };
-
- const saveStorage = () => {
- const data = {
- customUaList,
- customUrlUaMap,
- };
- localStorage.setItem(storageKey, JSON.stringify(data));
- };
-
- const applyUserAgent = () => {
- const url = new URL(location.href);
- const hostname = url.hostname;
- const subdomain = hostname.split('.').slice(1).join('.');
- const uaKey = urlUaMap[subdomain] || urlUaMap[hostname] || urlUaMap[url.origin] || 'Chrome-Win';
- const ua = uaList[uaKey];
- if (ua) {
- navigator.__defineGetter__('userAgent', function () {
- return ua;
- });
- }
- };
-
- init();
- })();