网站URL简化|去除杂乱参数

自动清理必应搜索、B站视频、百度搜索、KIMI AI和360搜索等的URL中的多余参数,优化浏览体验

Ajankohdalta 25.1.2025. Katso uusin versio.

  1. // ==UserScript==
  2. // @name 网站URL简化|去除杂乱参数
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.4
  5. // @description 自动清理必应搜索、B站视频、百度搜索、KIMI AI和360搜索等的URL中的多余参数,优化浏览体验
  6. // @author Your name
  7. // @license MIT
  8. // @match https://cn.bing.com/search*
  9. // @match https://www.bilibili.com/video/*
  10. // @match https://www.baidu.com/*
  11. // @match https://kimi.moonshot.cn/*
  12. // @match https://minecraft.fandom.com/*
  13. // @match https://www.so.com/s*
  14. // @grant GM_getValue
  15. // @grant GM_setValue
  16. // @grant GM_registerMenuCommand
  17. // @grant GM_unregisterMenuCommand
  18. // @run-at document-start
  19. // @priority 1
  20. // @icon data:image/x-icon;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMjIyLjQ0NHEzMzOvMzMz5TMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM+UzMzOuMjIycDMzMy0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwMDAQNDQ0IjIyMkgzMzOCMzMzszIyMtozMzPxNDQ0/DQ0NPwzMzPxMjIy2jMzM7MzMzODMjIySDQ0NCIwMDAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
  21. // ==/UserScript==
  22.  
  23. /* MIT License
  24.  
  25. Copyright (c) 2024 Your name
  26.  
  27. Permission is hereby granted, free of charge, to any person obtaining a copy
  28. of this software and associated documentation files (the "Software"), to deal
  29. in the Software without restriction, including without limitation the rights
  30. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31. copies of the Software, and to permit persons to whom the Software is
  32. furnished to do so, subject to the following conditions:
  33.  
  34. The above copyright notice and this permission notice shall be included in all
  35. copies or substantial portions of the Software.
  36.  
  37. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  38. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  39. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  40. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  41. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  42. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  43. SOFTWARE.
  44. */
  45.  
  46. (function() {
  47. 'use strict';
  48.  
  49. // 默认设置
  50. const defaultSettings = {
  51. enableCleaner: true,
  52. enableBing: true,
  53. enableBilibili: true,
  54. enableBaidu: true,
  55. enableKimi: true,
  56. enableMinecraft: true,
  57. enable360: true // 添加360搜索设置
  58. };
  59.  
  60. // 获取设置
  61. function getSettings() {
  62. return {
  63. enableCleaner: GM_getValue('enableCleaner', defaultSettings.enableCleaner),
  64. enableBing: GM_getValue('enableBing', defaultSettings.enableBing),
  65. enableBilibili: GM_getValue('enableBilibili', defaultSettings.enableBilibili),
  66. enableBaidu: GM_getValue('enableBaidu', defaultSettings.enableBaidu),
  67. enableKimi: GM_getValue('enableKimi', defaultSettings.enableKimi),
  68. enableMinecraft: GM_getValue('enableMinecraft', defaultSettings.enableMinecraft),
  69. enable360: GM_getValue('enable360', defaultSettings.enable360)
  70. };
  71. }
  72.  
  73. // 切换设置并返回新状态
  74. function toggleSetting(key) {
  75. const currentValue = GM_getValue(key, defaultSettings[key]);
  76. GM_setValue(key, !currentValue);
  77. return !currentValue;
  78. }
  79.  
  80. // 注册菜单命令
  81. function registerMenuCommands() {
  82. const settings = getSettings();
  83.  
  84. GM_registerMenuCommand(
  85. `${settings.enableCleaner ? '✅' : '❌'} 启用URL清理`,
  86. () => {
  87. toggleSetting('enableCleaner');
  88. location.reload(); // 重新加载页面来刷新菜单
  89. }
  90. );
  91.  
  92. GM_registerMenuCommand(
  93. `${settings.enableBing ? '✅' : '❌'} 必应搜索`,
  94. () => {
  95. toggleSetting('enableBing');
  96. location.reload(); // 重新加载页面来刷新菜单
  97. }
  98. );
  99.  
  100. GM_registerMenuCommand(
  101. `${settings.enableBilibili ? '✅' : '❌'} B站视频`,
  102. () => {
  103. toggleSetting('enableBilibili');
  104. location.reload(); // 重新加载页面来刷新菜单
  105. }
  106. );
  107.  
  108. GM_registerMenuCommand(
  109. `${settings.enableBaidu ? '✅' : '❌'} 百度搜索`,
  110. () => {
  111. toggleSetting('enableBaidu');
  112. location.reload();
  113. }
  114. );
  115.  
  116. GM_registerMenuCommand(
  117. `${settings.enableKimi ? '✅' : '❌'} KIMI AI`,
  118. () => {
  119. toggleSetting('enableKimi');
  120. location.reload();
  121. }
  122. );
  123.  
  124. GM_registerMenuCommand(
  125. `${settings.enableMinecraft ? '✅' : '❌'} Minecraft Wiki重定向`,
  126. () => {
  127. toggleSetting('enableMinecraft');
  128. location.reload();
  129. }
  130. );
  131.  
  132. GM_registerMenuCommand(
  133. `${settings.enable360 ? '✅' : '❌'} 360搜索`,
  134. () => {
  135. toggleSetting('enable360');
  136. location.reload();
  137. }
  138. );
  139. }
  140.  
  141. // 清理URL的函数
  142. function cleanUrl(url) {
  143. try {
  144. const settings = getSettings();
  145. if (!settings.enableCleaner) {
  146. return url;
  147. }
  148.  
  149. const urlObj = new URL(url);
  150.  
  151. // 处理Minecraft Wiki重定向
  152. if (settings.enableMinecraft && urlObj.hostname === 'minecraft.fandom.com') {
  153. const pathParts = urlObj.pathname.split('/');
  154. let newUrl;
  155.  
  156. if (pathParts[1] === 'wiki') {
  157. const pageName = pathParts.slice(2).join('/');
  158. newUrl = `https://en.minecraft.wiki/w/${pageName}`;
  159. } else if (pathParts[2] === 'wiki') {
  160. const lang = pathParts[1];
  161. const pageName = pathParts.slice(3).join('/');
  162. newUrl = `https://${lang}.minecraft.wiki/w/${pageName}`;
  163. }
  164.  
  165. if (newUrl && newUrl !== url) {
  166. window.location.href = newUrl;
  167. return url;
  168. }
  169. }
  170.  
  171. // 处理KIMI AI URL
  172. if (settings.enableKimi && urlObj.hostname === 'kimi.moonshot.cn') {
  173. if (urlObj.pathname === '/' || urlObj.pathname === '') {
  174. const newUrl = 'https://kimi.moonshot.cn/';
  175. if (newUrl !== url) {
  176. window.location.href = newUrl;
  177. return url;
  178. }
  179. return newUrl;
  180. }
  181. }
  182.  
  183. // 处理百度搜索URL
  184. if (settings.enableBaidu && urlObj.hostname === 'www.baidu.com' && urlObj.pathname === '/s') {
  185. const wd = urlObj.searchParams.get('wd');
  186. const pn = urlObj.searchParams.get('pn');
  187.  
  188. if (wd) {
  189. let newUrl = `https://www.baidu.com/s?wd=${encodeURIComponent(wd)}`;
  190. if (pn) {
  191. newUrl += `&pn=${pn}`;
  192. }
  193. if (newUrl !== url) {
  194. window.location.href = newUrl;
  195. return url;
  196. }
  197. return newUrl;
  198. }
  199. }
  200.  
  201. // 处理Bing搜索URL
  202. if (settings.enableBing && urlObj.hostname === 'cn.bing.com' && urlObj.pathname === '/search') {
  203. const searchQuery = urlObj.searchParams.get('q');
  204. const firstParam = urlObj.searchParams.get('first');
  205.  
  206. if (searchQuery) {
  207. let newUrl = `https://cn.bing.com/search?q=${encodeURIComponent(searchQuery)}`;
  208. if (firstParam) {
  209. newUrl += `&first=${firstParam}`;
  210. }
  211. if (newUrl !== url) {
  212. window.location.href = newUrl;
  213. return url;
  214. }
  215. return newUrl;
  216. }
  217. }
  218.  
  219. // 处理B站视频URL
  220. if (settings.enableBilibili && urlObj.hostname === 'www.bilibili.com' && urlObj.pathname.startsWith('/video/')) {
  221. const bvMatch = urlObj.pathname.match(/\/video\/(BV[\w]+)/);
  222. if (bvMatch) {
  223. const bvid = bvMatch[1];
  224. const newUrl = `https://www.bilibili.com/video/${bvid}`;
  225. // 只返回新URL,不进行跳转
  226. return newUrl;
  227. }
  228. }
  229.  
  230. // 处理360搜索URL
  231. if (settings.enable360 && urlObj.hostname === 'www.so.com' && urlObj.pathname === '/s') {
  232. const q = urlObj.searchParams.get('q');
  233. const pn = urlObj.searchParams.get('pn');
  234.  
  235. if (q) {
  236. let newUrl = `https://www.so.com/s?q=${encodeURIComponent(q)}`;
  237. if (pn) {
  238. newUrl += `&pn=${pn}`;
  239. }
  240. if (newUrl !== url) {
  241. window.location.href = newUrl;
  242. return url;
  243. }
  244. return newUrl;
  245. }
  246. }
  247.  
  248. return url;
  249. } catch (error) {
  250. console.error('URL处理错误:', error);
  251. return url;
  252. }
  253. }
  254.  
  255. // 检查并清理当前URL
  256. function checkAndCleanUrl() {
  257. const currentUrl = window.location.href;
  258. const cleanedUrl = cleanUrl(currentUrl);
  259.  
  260. if (cleanedUrl !== currentUrl) {
  261. // 使用 history.replaceState 来更新URL而不刷新页面
  262. window.history.replaceState(null, '', cleanedUrl);
  263. }
  264. }
  265.  
  266. // 监听URL变化
  267. let lastUrl = window.location.href;
  268. new MutationObserver(() => {
  269. const currentUrl = window.location.href;
  270. if (currentUrl !== lastUrl) {
  271. lastUrl = currentUrl;
  272. checkAndCleanUrl();
  273. }
  274. }).observe(document, {subtree: true, childList: true});
  275.  
  276. // 处理必应搜索结果中的Minecraft Wiki链接
  277. function processBingSearchResults() {
  278. if (!window.location.href.includes('bing.com/search')) return;
  279.  
  280. // 获取主搜索结果容器
  281. const mainResults = document.getElementById('b_results');
  282. if (!mainResults) return;
  283.  
  284. // 获取所有未处理的搜索结果链接
  285. const searchResults = mainResults.querySelectorAll('a[href*="minecraft.fandom.com"]:not([data-wiki-processed])');
  286.  
  287. searchResults.forEach(link => {
  288. try {
  289. // 标记该链接已处理
  290. link.setAttribute('data-wiki-processed', 'true');
  291.  
  292. const url = new URL(link.href);
  293. if (url.hostname === 'minecraft.fandom.com') {
  294. const pathParts = url.pathname.split('/');
  295. let newUrl;
  296.  
  297. // 构建新的Wiki URL
  298. if (pathParts[1] === 'wiki') {
  299. const pageName = pathParts.slice(2).join('/');
  300. newUrl = `https://en.minecraft.wiki/w/${pageName}`;
  301. } else if (pathParts[2] === 'wiki') {
  302. const lang = pathParts[1];
  303. const pageName = pathParts.slice(3).join('/');
  304. newUrl = `https://${lang}.minecraft.wiki/w/${pageName}`;
  305. }
  306.  
  307. if (newUrl) {
  308. // 获取搜索结果容器
  309. const resultContainer = link.closest('li') || link.parentElement;
  310.  
  311. // 设置结果容器样式
  312. resultContainer.style.position = 'relative';
  313. resultContainer.style.color = '#666';
  314. resultContainer.style.pointerEvents = 'none';
  315.  
  316. // 创建新链接提示
  317. const notice = document.createElement('div');
  318. notice.style.cssText = `
  319. margin-top: 8px;
  320. padding: 8px;
  321. background: #f8f8f8;
  322. border-radius: 4px;
  323. pointer-events: auto;
  324. `;
  325. notice.innerHTML = `
  326. <div style="color: #e74c3c; font-size: 0.9em; margin-bottom: 4px;">
  327. ⚠️ 上述链接指向已弃用的旧版Wiki
  328. </div>
  329. <a href="${newUrl}" style="
  330. display: inline-block;
  331. color: #2ecc71;
  332. font-weight: bold;
  333. text-decoration: none;
  334. ">
  335. 👉 访问新版Wiki页面
  336. </a>
  337. `;
  338.  
  339. // 添加新链接提示
  340. resultContainer.appendChild(notice);
  341. }
  342. }
  343. } catch (error) {
  344. console.error('处理搜索结果链接时出错:', error);
  345. }
  346. });
  347. }
  348.  
  349. // 使用防抖函数来限制处理频率
  350. function debounce(func, wait) {
  351. let timeout;
  352. return function executedFunction(...args) {
  353. const later = () => {
  354. clearTimeout(timeout);
  355. func(...args);
  356. };
  357. clearTimeout(timeout);
  358. timeout = setTimeout(later, wait);
  359. };
  360. }
  361.  
  362. // 监听页面变化以处理动态加载的搜索结果
  363. function observeSearchResults() {
  364. const debouncedProcess = debounce(processBingSearchResults, 300);
  365.  
  366. // 创建观察器
  367. const observer = new MutationObserver(() => {
  368. if (document.getElementById('b_results')) {
  369. debouncedProcess();
  370. }
  371. });
  372.  
  373. // 观察整个body
  374. observer.observe(document.body, {
  375. childList: true,
  376. subtree: true
  377. });
  378.  
  379. // 首次处理
  380. processBingSearchResults();
  381.  
  382. // 监听URL变化
  383. let lastUrl = location.href;
  384. const urlChecker = setInterval(() => {
  385. if (location.href !== lastUrl) {
  386. lastUrl = location.href;
  387. processBingSearchResults();
  388. }
  389. }, 500);
  390.  
  391. // 清理函数
  392. return () => {
  393. observer.disconnect();
  394. clearInterval(urlChecker);
  395. };
  396. }
  397.  
  398. // 初始化
  399. function init() {
  400. registerMenuCommands();
  401. checkAndCleanUrl();
  402.  
  403. // 如果是必应搜索页面,处理搜索结果
  404. if (window.location.href.includes('bing.com/search')) {
  405. if (document.readyState === 'loading') {
  406. document.addEventListener('DOMContentLoaded', observeSearchResults);
  407. } else {
  408. observeSearchResults();
  409. }
  410. }
  411. }
  412.  
  413. init();
  414. })();// ==UserScript==
  415. // @name 网站URL简化|去除杂乱参数
  416. // @namespace http://tampermonkey.net/
  417. // @version 1.4
  418. // @description 自动清理必应搜索、B站视频、百度搜索、KIMI AI和360搜索等的URL中的多余参数,优化浏览体验
  419. // @author Your name
  420. // @license MIT
  421. // @match https://cn.bing.com/search*
  422. // @match https://www.bilibili.com/video/*
  423. // @match https://www.baidu.com/*
  424. // @match https://kimi.moonshot.cn/*
  425. // @match https://minecraft.fandom.com/*
  426. // @match https://www.so.com/s*
  427. // @grant GM_getValue
  428. // @grant GM_setValue
  429. // @grant GM_registerMenuCommand
  430. // @grant GM_unregisterMenuCommand
  431. // @run-at document-start
  432. // @priority 1
  433. // @icon data:image/x-icon;base64,AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTEvMzMzljMzM9kzMzP6MzMz+TMzM9gyMjKVMjIyLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAgzMzOXMzMz/TIyMsEzMzNuMjIySDIyMkgzMzNvMjIywTIyMv0zMzOWJCQkBwAAAAAAAAAAAAAAACAgIAgzMzO/MzMz5zMzM0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTFEMzMz5TMzM70kJCQHAAAAAAAAAAAzMzOXMzMz6jIyMiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMCAzMzPlMzMzlQAAAAAxMTEvMzMz/TIyMlEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExRDIyMv0yMjIuMzMzljIyMtAyMjJsMzMz2jIyMpM0NDRsMzMz3jMzM7UyMjIuMzMzaTMzM2kzMzNpMzMzaTQ0NFgyMjLAMzMzlTMzM9kzMzOBLi4uFjMzM/wzMzOcMzMzLTMzM/8zMzNqAAAAAjExMW0zMzNqMzMzaTIyMmswMDAgMzMzbzMzM9gzMzP5MjIyWzU1NR00NDTLMzMz5zExMUMzMzN5MTExKjExMT4zMzP/MzMznDIyMnAzMzPnMzMznDIyMkgzMzP5MzMz+zMzM1o1NTVNNTU1TTMzM+wyMjLMNTU1TTIyMkIzMzNGMzMzzjMzM+EzMzN9MzMzujIyMnY0NDRJMzMz9zIyMtoxMTGBMzMzSzExMWMzMzPvMzMz0jExMWMxMTE+MzMzGTMzM9QzMzO1MzMzcjMzM+czMzOIMjIycTMzM9YzMzOXMzMz0TMzMwUqKioGMzMz2DIyMq0qKioGAAAABAAAAAAyMjKYMzMz0SwsLBczMzORMDAwJTMzM8MyMjKUMDAwMDMzM/0zMzNVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMUkyMjL9MzMzLQAAAAAzMzOXMzMz7TExMSoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMCUzMzPoMjIylQAAAAAAAAAAICAgCDMzM74zMzPtMzMzVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMVMzMzPrMzMzvSQkJAcAAAAAAAAAAAAAAAAgICAIMzMzljMzM/0zMzPSMzMzgjIyMlwyMjJcMzMzgjMzM9IzMzP9MzMzlSQkJAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjIuMzMzljMzM9gzMzP5MzMz+TMzM9gzMzOVMjIyLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJycNMzMzWjMzM5syMjLLMzMz7TMzM/wzMzP8MzMz7DIyMsozMzOaMjIyVyoqKgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMjMjIymTMzM/QzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy8zMzM5cwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCQHMzMzhzMzM/kzMzP/MzMz/zMzM/8zMzP0MzMzvzIyMpkzMzOHMzMzhzMzM5oyMjLAMzMz9TMzM/8zMzP/MzMz/zIyMvgyMjKEJCQkBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwIDIyMtAzMzP/MzMz/zMzM/8yMjK3NDQ0TyQkJAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAIMzMzUDIyMrczMzP+MzMz/zMzM/8zMzPNMzMzHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMy0zMzPoMzMz/zMzM/8zMzPTMzMzPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDoyMjLQMzMz/zMzM/8zMzPmMTExKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAgMzMz5zMzM/8zMzP/MzMzoEBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJAczMzOXMzMz/zMzM/8zMzPlMzMzHgAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkBzMzM88zMzP/MzMz/zIyMo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjJ/MzMz/zMzM/8zMzPMKioqBgAAAAAAAAAAAAAAAAAAAAAzMzOGMzMz/zMzM/8zMzOqAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOXMzMz/zMzM/8zMzODAAAAAAAAAAAAAAAAMzMzIzMzM/kzMzP/MzMz4Tc3Nw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKgYyMjLQMzMz/zIyMvguLi4hAAAAAAAAAAA0NDSZMzMz/zMzM/8yMjJWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDozMzP+MzMz/zMzM5cAAAAAOzs7DTMzM/UzMzP/MzMz1DIyMjMzMzPbMzMzwjMzM6kzMzOQMzMzdzQ0NF40NDRFMjIykzMzM+szMzPrMzMzlwAAAAAyMjK3MjIyyjQ0NLIzMzOaMzMzgzIyMms0NDRTNDQ0OzIyMiQqKioMAAAAADIyMrYzMzP/MzMz9CoqKgwxMTFYMzMz/zMzM/8zMzNvAAAAADIyMqMzMzP/MzMz/zMzM+AyMjJlNDQ0ezMzM5IzMzP7MzMz/zMzM/80NDRTAAAAAAAAAAA5OTkJMDAwIDIyMjgzMzNQMzMzaDIyMn8zMzOXMzMzrzMzM8c0NDSPNDQ0TjMzM/8zMzP/MjIyVjMzM5ozMzP/MzMz/y4uLiEAAAAANDQ0TzMzM/8zMzP/MzMz/DExMRUAAAAANDQ0MTMzM/8zMzP/MzMz9DMzMwoAAAAAAAAAADIyMtEyMjLKNDQ0sjQ0NJk0NDSANDQ0ZzQ0NE80NDQ2NjY2EwAAAAAkJCQHMzMz9TMzM/8yMjKZMjIyyzMzM/8zMzPmAAAAAAAAAAA5OTkJMjIy8zMzM/8zMzP/MjIyYAAAAAAyMjKEMzMz/zMzM/8zMzOpAAAAAAAAAAAgICAIICAgCDY2NhMzMzMjNDQ0OzIyMlIzMzNqMjIyhTIyMqIyMjJnKioqBgAAAAAyMjLAMzMz/zIyMsozMzPrMzMz/zIyMsAAAAAAAAAAAAAAAAAzMzOpMzMz/zMzM/8yMjKtAAAAADIyMpMyMjK3MjIytzQ0NEUAAAAAAAAAADMzM8MzMzP/MzMz/zMzM6QyMjJ6MzMzXzExMUQzMzOfMzMz/zMzM/8zMzOBAAAAADIyMpkzMzP/MzMz6zMzM/szMzP/MjIyrQAAAAA0NDQ7NDQ0OzQ0NIUzMzP/MzMz/zIyMvMyMjI9NDQ0OzQ0NDs0NDQ7NDQ0OzExMSoAAAAAMDAwNTMzM/4zMzP/MzMz8jIyMmAzMzNzMzMzqTMzM/8zMzP/MzMz5ioqKgwAAAAAMzMzhjMzM/8zMzP7MzMz/jMzM/8zMzOrAAAAADMzM5szMzObMzMzmzMzM5szMzPqMzMz/zMzM/8yMjLGMzMzmzMzM5szMzObMzMzbjIyMiQzMzNLMzMzzjMzM/8zMzP/MjIyijMzM0szMzO1MzMz/zMzM/8zMzOgMzMzSwAAAAAzMzOIMzMz/zIyMvgzMzPvMzMz/zMzM70AAAAAAAAAAAAAAAAAAAAAAAAAADIyMsozMzP/MzMz/zIyMmwAAAAAAAAAAAAAAAAAAAAAMzMzNzMzM3MyMjJ2MzMz9jMzM/8zMzP+MzMzgjMzM3MyMjJ1MTExdzExMXcyMjJ1AAAAADQ0NJ0zMzP/MzMz5zMzM84zMzP/MjIy5AAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyyjMzM/8zMzP/MjIybAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyZTMzM9MyMjLGMzMzqzMzM4wyMjJbMTExNDMzM6AzMzP/MzMz/zExMT8AAAAAMzMzxDMzM/8yMjLGMjIynTMzM/8zMzP/MDAwIDIyMmcyMjLHMjIyxzIyMscyMjLzMzMz/zMzM/8yMjLfMjIyxzIyMscyMjLHMDAwMAAAAAAAAAAAMjIytzMzM/8zMzP/MzMzoDMzM4szMzOwMzMz/zMzM/8zMzPiAAAAAjk5OQkzMzP3MzMz/zMzM5UzMzNaMzMz/zMzM/8yMjJwKioqBioqKgwqKioMKioqDDMzM8wzMzP/MzMz/zMzM3MqKioMKioqDCoqKgwAAAADAAAAAAAAAAAzMzNkMzMz/zMzM/8zMzORAAAAADQ0NEozMzP/MzMz/zIyMooAAAAAMTExUzMzM/8zMzP/MTExUzc3Nw4zMzP1MzMz/zMzM9YAAAACAAAAAAAAAAAAAAAAMjIytDMzM+MzMzPjMjIyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMRUzMzPpMzMz6zMzM8gAAAAALS0tETMzMyMzMzMjKioqDAAAAAAyMjK8MzMz/zMzM/IuLi4LAAAAADMzM5szMzP/MzMz/zMzM1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzQTMzM/8zMzP/MzMzlgAAAAAAAAAAMjIyJDMzM/kzMzP/MzMz5jY2NhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwozMzPYMzMz/zIyMvgwMDAgAAAAAAAAAAAAAAAAMzMziDMzM/8zMzP/MjIytgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTExpTMzM/8zMzP/MzMzgwAAAAAAAAAAAAAAAAAAAAAkJCQHMzMzzzMzM/8zMzP/MjIyogAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATIyMpQzMzP/MzMz/zIyMssqKioGAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAgMzMz5zMzM/8zMzP/MjIytzY2NhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMBAzMzOuMzMz/zMzM/8zMzPlMzMzHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NDQsMzMz5zMzM/8zMzP/MzMz5zIyMlwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTFYMzMz4zMzM/8zMzP/MzMz5TExMSoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAgMzMzzzMzM/8zMzP/MzMz/zMzM9gzMzN0MzMzIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyMzMzNzMzMz1zMzM/8zMzP/MzMz/zMzM80zMzMeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCQHNDQ0hTMzM/kzMzP/MzMz/zMzM/8zMzP/MzMz5zIyMsEzMzOuMzMzrzIyMsEzMzPnMzMz/zMzM/8zMzP/MzMz/zMzM/gyMjKEKioqBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALS0tIjIyMpgzMzP0MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMvMzMzOXLi4uIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJw00NDRZMzMzmjIyMsozMzPsMzMz/DMzM/wzMzPsMjIyyjMzM5o0NDRYKioqDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwMDAQNDQ0IjAwMEoyMjKEMzMztDIyMtozMzPyNDQ0/DQ0NPwzMzPwMzMz2TQ0NLIzMzOBMjIyRzQ0NCIwMDAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMTExLzMzM3IzMzOwMzMz5jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zQ0NOMyMjKuMjIycC0tLS0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADk5ORszMzOXMzMz4TMzM/kzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz+DMzM+AyMjKUNTU1GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTkSMjIyazMzM+8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/4yMjLzMzMz5zMzM94zMzPZMzMz1jMzM9YzMzPZMzMz3zMzM+czMzPzMzMz/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz7DQ0NGcqKioSAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMTkyMjKyMzMz+TMzM/8zMzP/MzMz/zMzM/8zMzPyMzMzvzMzM4czMzNaMjIyODMzMx47OzsNKioqBioqKgY3NzcOMTExHzExMTkyMjJcMjIyiTIyMsAyMjLzMzMz/zMzM/8zMzP/MzMz/zMzM/kzMzOvNDQ0NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDQ0WTMzM+YzMzP+MzMz/zMzM/8zMzP/MzMz/jIyMqkzMzM8MTExFUBAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBABC4uLhYzMzM8MjIyqDMzM/4zMzP/MzMz/zMzM/8zMzP9MjIy5DQ0NFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKgYzMzNpMzMz8jMzM/8zMzP/MzMz/zMzM/kzMzPCMjIyPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDoyMjLAMjIy+DMzM/8zMzP/MzMz/zMzM/EzMzNkMzMzBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM2gzMzPqMzMz/zMzM/8zMzP/MzMz6jIyMno1NTUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLi4WMjIydTMzM+UzMzP/MzMz/zMzM/8zMzPoMDAwZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDQ0WTMzM/IzMzP/MzMz/zMzM/8zMzPcMzMzQTMzMwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBABDIyMmszMzPYMzMz/DMzM/8zMzP/MzMz/zMzM/EzMzNkMzMzBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExWTMzM+UzMzP+MzMz/zMzM/8zMzP/MzMz/zMzM9wzMzNqMDAwJTAwMBBVVVUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDMDAwEDIyMiQ0NDRnMzMz2TMzM/8zMzP/MzMz/zMzM/8zMzP+MjIy5DQ0NFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIyMjgyMjKxMzMz+TMzM/8zMzP/MzMz/zMzM/8zMzP+MzMz4TMzM64zMzODMjIyYDIyMkc1NTU1MjIyLjIyMi40NDQ2MjIyRzIyMmAzMzODMzMzrjMzM+EzMzP+MzMz/zMzM/8zMzP/MzMz/zMzM/kzMzOvNTU1NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTkSMzMzajMzM+4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP9MzMz9DMzM+wzMzPmNDQ04zQ0NOMzMzPmMzMz7DMzM/QzMzP9MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/NDQ07TMzM2gtLS0RAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMRozMzOWMzMz4TMzM/kzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz+DMzM+A0NDSUMzMzGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMjIyLjQ0NHEzMzOvMzMz5TMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM+UzMzOuMjIycDMzMy0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwMDAQNDQ0IjIyMkgzMzOCMzMzszIyMtozMzPxNDQ0/DQ0NPwzMzPxMjIy2jMzM7MzMzODMjIySDQ0NCIwMDAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
  434. // ==/UserScript==
  435.  
  436. /* MIT License
  437.  
  438. Copyright (c) 2024 Your name
  439.  
  440. Permission is hereby granted, free of charge, to any person obtaining a copy
  441. of this software and associated documentation files (the "Software"), to deal
  442. in the Software without restriction, including without limitation the rights
  443. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  444. copies of the Software, and to permit persons to whom the Software is
  445. furnished to do so, subject to the following conditions:
  446.  
  447. The above copyright notice and this permission notice shall be included in all
  448. copies or substantial portions of the Software.
  449.  
  450. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  451. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  452. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  453. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  454. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  455. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  456. SOFTWARE.
  457. */
  458.  
  459. (function() {
  460. 'use strict';
  461.  
  462. // 默认设置
  463. const defaultSettings = {
  464. enableCleaner: true,
  465. enableBing: true,
  466. enableBilibili: true,
  467. enableBaidu: true,
  468. enableKimi: true,
  469. enableMinecraft: true,
  470. enable360: true // 添加360搜索设置
  471. };
  472.  
  473. // 获取设置
  474. function getSettings() {
  475. return {
  476. enableCleaner: GM_getValue('enableCleaner', defaultSettings.enableCleaner),
  477. enableBing: GM_getValue('enableBing', defaultSettings.enableBing),
  478. enableBilibili: GM_getValue('enableBilibili', defaultSettings.enableBilibili),
  479. enableBaidu: GM_getValue('enableBaidu', defaultSettings.enableBaidu),
  480. enableKimi: GM_getValue('enableKimi', defaultSettings.enableKimi),
  481. enableMinecraft: GM_getValue('enableMinecraft', defaultSettings.enableMinecraft),
  482. enable360: GM_getValue('enable360', defaultSettings.enable360)
  483. };
  484. }
  485.  
  486. // 切换设置并返回新状态
  487. function toggleSetting(key) {
  488. const currentValue = GM_getValue(key, defaultSettings[key]);
  489. GM_setValue(key, !currentValue);
  490. return !currentValue;
  491. }
  492.  
  493. // 注册菜单命令
  494. function registerMenuCommands() {
  495. const settings = getSettings();
  496.  
  497. GM_registerMenuCommand(
  498. `${settings.enableCleaner ? '✅' : '❌'} 启用URL清理`,
  499. () => {
  500. toggleSetting('enableCleaner');
  501. location.reload(); // 重新加载页面来刷新菜单
  502. }
  503. );
  504.  
  505. GM_registerMenuCommand(
  506. `${settings.enableBing ? '✅' : '❌'} 必应搜索`,
  507. () => {
  508. toggleSetting('enableBing');
  509. location.reload(); // 重新加载页面来刷新菜单
  510. }
  511. );
  512.  
  513. GM_registerMenuCommand(
  514. `${settings.enableBilibili ? '✅' : '❌'} B站视频`,
  515. () => {
  516. toggleSetting('enableBilibili');
  517. location.reload(); // 重新加载页面来刷新菜单
  518. }
  519. );
  520.  
  521. GM_registerMenuCommand(
  522. `${settings.enableBaidu ? '✅' : '❌'} 百度搜索`,
  523. () => {
  524. toggleSetting('enableBaidu');
  525. location.reload();
  526. }
  527. );
  528.  
  529. GM_registerMenuCommand(
  530. `${settings.enableKimi ? '✅' : '❌'} KIMI AI`,
  531. () => {
  532. toggleSetting('enableKimi');
  533. location.reload();
  534. }
  535. );
  536.  
  537. GM_registerMenuCommand(
  538. `${settings.enableMinecraft ? '✅' : '❌'} Minecraft Wiki重定向`,
  539. () => {
  540. toggleSetting('enableMinecraft');
  541. location.reload();
  542. }
  543. );
  544.  
  545. GM_registerMenuCommand(
  546. `${settings.enable360 ? '✅' : '❌'} 360搜索`,
  547. () => {
  548. toggleSetting('enable360');
  549. location.reload();
  550. }
  551. );
  552. }
  553.  
  554. // 清理URL的函数
  555. function cleanUrl(url) {
  556. try {
  557. const settings = getSettings();
  558. if (!settings.enableCleaner) {
  559. return url;
  560. }
  561.  
  562. const urlObj = new URL(url);
  563.  
  564. // 处理Minecraft Wiki重定向
  565. if (settings.enableMinecraft && urlObj.hostname === 'minecraft.fandom.com') {
  566. const pathParts = urlObj.pathname.split('/');
  567. let newUrl;
  568.  
  569. if (pathParts[1] === 'wiki') {
  570. const pageName = pathParts.slice(2).join('/');
  571. newUrl = `https://en.minecraft.wiki/w/${pageName}`;
  572. } else if (pathParts[2] === 'wiki') {
  573. const lang = pathParts[1];
  574. const pageName = pathParts.slice(3).join('/');
  575. newUrl = `https://${lang}.minecraft.wiki/w/${pageName}`;
  576. }
  577.  
  578. if (newUrl && newUrl !== url) {
  579. window.location.href = newUrl;
  580. return url;
  581. }
  582. }
  583.  
  584. // 处理KIMI AI URL
  585. if (settings.enableKimi && urlObj.hostname === 'kimi.moonshot.cn') {
  586. if (urlObj.pathname === '/' || urlObj.pathname === '') {
  587. const newUrl = 'https://kimi.moonshot.cn/';
  588. if (newUrl !== url) {
  589. window.location.href = newUrl;
  590. return url;
  591. }
  592. return newUrl;
  593. }
  594. }
  595.  
  596. // 处理百度搜索URL
  597. if (settings.enableBaidu && urlObj.hostname === 'www.baidu.com' && urlObj.pathname === '/s') {
  598. const wd = urlObj.searchParams.get('wd');
  599. const pn = urlObj.searchParams.get('pn');
  600.  
  601. if (wd) {
  602. let newUrl = `https://www.baidu.com/s?wd=${encodeURIComponent(wd)}`;
  603. if (pn) {
  604. newUrl += `&pn=${pn}`;
  605. }
  606. if (newUrl !== url) {
  607. window.location.href = newUrl;
  608. return url;
  609. }
  610. return newUrl;
  611. }
  612. }
  613.  
  614. // 处理Bing搜索URL
  615. if (settings.enableBing && urlObj.hostname === 'cn.bing.com' && urlObj.pathname === '/search') {
  616. const searchQuery = urlObj.searchParams.get('q');
  617. const firstParam = urlObj.searchParams.get('first');
  618.  
  619. if (searchQuery) {
  620. let newUrl = `https://cn.bing.com/search?q=${encodeURIComponent(searchQuery)}`;
  621. if (firstParam) {
  622. newUrl += `&first=${firstParam}`;
  623. }
  624. if (newUrl !== url) {
  625. window.location.href = newUrl;
  626. return url;
  627. }
  628. return newUrl;
  629. }
  630. }
  631.  
  632. // 处理B站视频URL
  633. if (settings.enableBilibili && urlObj.hostname === 'www.bilibili.com' && urlObj.pathname.startsWith('/video/')) {
  634. const bvMatch = urlObj.pathname.match(/\/video\/(BV[\w]+)/);
  635. if (bvMatch) {
  636. const bvid = bvMatch[1];
  637. const newUrl = `https://www.bilibili.com/video/${bvid}`;
  638. // 只返回新URL,不进行跳转
  639. return newUrl;
  640. }
  641. }
  642.  
  643. // 处理360搜索URL
  644. if (settings.enable360 && urlObj.hostname === 'www.so.com' && urlObj.pathname === '/s') {
  645. const q = urlObj.searchParams.get('q');
  646. const pn = urlObj.searchParams.get('pn');
  647.  
  648. if (q) {
  649. let newUrl = `https://www.so.com/s?q=${encodeURIComponent(q)}`;
  650. if (pn) {
  651. newUrl += `&pn=${pn}`;
  652. }
  653. if (newUrl !== url) {
  654. window.location.href = newUrl;
  655. return url;
  656. }
  657. return newUrl;
  658. }
  659. }
  660.  
  661. return url;
  662. } catch (error) {
  663. console.error('URL处理错误:', error);
  664. return url;
  665. }
  666. }
  667.  
  668. // 检查并清理当前URL
  669. function checkAndCleanUrl() {
  670. const currentUrl = window.location.href;
  671. const cleanedUrl = cleanUrl(currentUrl);
  672.  
  673. if (cleanedUrl !== currentUrl) {
  674. // 使用 history.replaceState 来更新URL而不刷新页面
  675. window.history.replaceState(null, '', cleanedUrl);
  676. }
  677. }
  678.  
  679. // 监听URL变化
  680. let lastUrl = window.location.href;
  681. new MutationObserver(() => {
  682. const currentUrl = window.location.href;
  683. if (currentUrl !== lastUrl) {
  684. lastUrl = currentUrl;
  685. checkAndCleanUrl();
  686. }
  687. }).observe(document, {subtree: true, childList: true});
  688.  
  689. // 处理必应搜索结果中的Minecraft Wiki链接
  690. function processBingSearchResults() {
  691. if (!window.location.href.includes('bing.com/search')) return;
  692.  
  693. // 获取主搜索结果容器
  694. const mainResults = document.getElementById('b_results');
  695. if (!mainResults) return;
  696.  
  697. // 获取所有未处理的搜索结果链接
  698. const searchResults = mainResults.querySelectorAll('a[href*="minecraft.fandom.com"]:not([data-wiki-processed])');
  699.  
  700. searchResults.forEach(link => {
  701. try {
  702. // 标记该链接已处理
  703. link.setAttribute('data-wiki-processed', 'true');
  704.  
  705. const url = new URL(link.href);
  706. if (url.hostname === 'minecraft.fandom.com') {
  707. const pathParts = url.pathname.split('/');
  708. let newUrl;
  709.  
  710. // 构建新的Wiki URL
  711. if (pathParts[1] === 'wiki') {
  712. const pageName = pathParts.slice(2).join('/');
  713. newUrl = `https://en.minecraft.wiki/w/${pageName}`;
  714. } else if (pathParts[2] === 'wiki') {
  715. const lang = pathParts[1];
  716. const pageName = pathParts.slice(3).join('/');
  717. newUrl = `https://${lang}.minecraft.wiki/w/${pageName}`;
  718. }
  719.  
  720. if (newUrl) {
  721. // 获取搜索结果容器
  722. const resultContainer = link.closest('li') || link.parentElement;
  723.  
  724. // 设置结果容器样式
  725. resultContainer.style.position = 'relative';
  726. resultContainer.style.color = '#666';
  727. resultContainer.style.pointerEvents = 'none';
  728.  
  729. // 创建新链接提示
  730. const notice = document.createElement('div');
  731. notice.style.cssText = `
  732. margin-top: 8px;
  733. padding: 8px;
  734. background: #f8f8f8;
  735. border-radius: 4px;
  736. pointer-events: auto;
  737. `;
  738. notice.innerHTML = `
  739. <div style="color: #e74c3c; font-size: 0.9em; margin-bottom: 4px;">
  740. ⚠️ 上述链接指向已弃用的旧版Wiki
  741. </div>
  742. <a href="${newUrl}" style="
  743. display: inline-block;
  744. color: #2ecc71;
  745. font-weight: bold;
  746. text-decoration: none;
  747. ">
  748. 👉 访问新版Wiki页面
  749. </a>
  750. `;
  751.  
  752. // 添加新链接提示
  753. resultContainer.appendChild(notice);
  754. }
  755. }
  756. } catch (error) {
  757. console.error('处理搜索结果链接时出错:', error);
  758. }
  759. });
  760. }
  761.  
  762. // 使用防抖函数来限制处理频率
  763. function debounce(func, wait) {
  764. let timeout;
  765. return function executedFunction(...args) {
  766. const later = () => {
  767. clearTimeout(timeout);
  768. func(...args);
  769. };
  770. clearTimeout(timeout);
  771. timeout = setTimeout(later, wait);
  772. };
  773. }
  774.  
  775. // 监听页面变化以处理动态加载的搜索结果
  776. function observeSearchResults() {
  777. const debouncedProcess = debounce(processBingSearchResults, 300);
  778.  
  779. // 创建观察器
  780. const observer = new MutationObserver(() => {
  781. if (document.getElementById('b_results')) {
  782. debouncedProcess();
  783. }
  784. });
  785.  
  786. // 观察整个body
  787. observer.observe(document.body, {
  788. childList: true,
  789. subtree: true
  790. });
  791.  
  792. // 首次处理
  793. processBingSearchResults();
  794.  
  795. // 监听URL变化
  796. let lastUrl = location.href;
  797. const urlChecker = setInterval(() => {
  798. if (location.href !== lastUrl) {
  799. lastUrl = location.href;
  800. processBingSearchResults();
  801. }
  802. }, 500);
  803.  
  804. // 清理函数
  805. return () => {
  806. observer.disconnect();
  807. clearInterval(urlChecker);
  808. };
  809. }
  810.  
  811. // 初始化
  812. function init() {
  813. registerMenuCommands();
  814. checkAndCleanUrl();
  815.  
  816. // 如果是必应搜索页面,处理搜索结果
  817. if (window.location.href.includes('bing.com/search')) {
  818. if (document.readyState === 'loading') {
  819. document.addEventListener('DOMContentLoaded', observeSearchResults);
  820. } else {
  821. observeSearchResults();
  822. }
  823. }
  824. }
  825.  
  826. init();
  827. })();