<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用油猴腳本去除瀏覽器搜索的URL后綴,減少廣告

      任務背景

      今天碰到了一件事,我在瀏覽器里搜索"adobe",它顯示的URL是

      https://www.bing.com/search?qs=HS&pq=adobe&sk=CSYN1UAS7MT2FT1LT5UT2CT1&sc=22-5&pglt=419&q=adobe&cvid=16277c9e0b644d67b1b6e44de18b1536&gs_lcrp=EgRlZGdlKgYIABAAGEAyBggAEAAYQDIGCAEQLhhAMgYIAhAuGEAyBggDEC4YQDIGCAQQRRg8MgYIBRBFGDwyBggGEEUYPDIGCAcQRRg8MgYICBBFGEHSAQg1MjcwajBqMagCALACAA&FORM=ANNTA1&PC=U531
      
      

      通過對比分析和查閱資料,我發現它其實用于搜索的只有

      
      https://www.bing.com/search?q=adobe
      
      

      后面這一大串碼可能是運營商給你的營銷ID,通過這個鏈接他們能夠獲得廣告分成。

      針對這個問題,筆者借助AI,寫一個完整的Tampermonkey腳本來避免。 并且希望將它能夠通用到所有的URL搜索

      效果展示

      • 使用前
        image

      • 使用后
        image

      腳本內容

      // ==UserScript==
      // @name         Search URL Cleaner (通用搜索引擎URL清理)
      // @namespace    http://tampermonkey.net/
      // @version      1.3
      // @description  結合精確匹配與動態擴展,自動清理搜索引擎URL中的多余參數。
      // @author       You & AI Assistant
      // @match        https://www.google.com/search*
      // @match        https://www.google.co.jp/search*
      // @match        https://www.google.com.hk/search*
      // @match        https://www.google.*.*/search*  // 通配符匹配其他Google國際域名
      // @match        https://www.bing.com/search*
      // @match        https://www.baidu.com/s*
      // @match        https://www.baidu.com/search*
      // @match        https://duckduckgo.com/*
      // @match        https://*.yahoo.com/search*
      // @match        https://*.startpage.com/*
      // @grant        none
      // @run-at       document-start
      // ==/UserScript==
      
      (function() {
          'use strict';
      
          /**
           * 配置對象
           * key: 搜索引擎的主機名或通用模式
           * value: 一個數組,包含應保留的 URL 參數。
           */
          let allowedParamsConfig = {
              // Google 的主配置,將被動態應用到其他Google域名
              'www.google.com': ['q', 'tbm', 'start', 'hl', 'lr'],
              'www.bing.com':   ['q', 'first', 'count', 'FORM'],
              'www.baidu.com':  ['wd', 'word', 'pn', 'rn'],
              'duckduckgo.com': ['q', 'ia', 'iax'],
              'yahoo.com':      ['p', 'q', 'ei', 'fr'],
              'startpage.com':  ['query', 'cat', 'sc']
          };
      
          // --- 動態配置 Google 國際域名 ---
          // 如果當前是 Google 國際域名,則動態添加到配置中
          const hostname = window.location.hostname;
          if (hostname.startsWith('www.google.') && hostname !== 'www.google.com' && !allowedParamsConfig.hasOwnProperty(hostname)) {
              // 從 www.google.com 獲取配置并復制
              allowedParamsConfig[hostname] = [...allowedParamsConfig['www.google.com']];
          }
          // --- 動態配置結束 ---
      
          /**
           * 主函數:清理當前頁面的 URL
           */
          function cleanUrl() {
              const currentHostname = window.location.hostname;
              let allowedKeys = allowedParamsConfig[currentHostname];
      
              // 如果當前主機名不在配置中,嘗試更通用的匹配
              if (!allowedKeys) {
                   // 可以根據需要擴展更多通用匹配邏輯
                   // 例如,對于所有 google.* 域名,如果上面的動態配置沒有生效
                   if (currentHostname.startsWith('www.google.')) {
                       allowedKeys = allowedParamsConfig['www.google.com']; // 使用通用Google配置
                   }
                   // 對于Yahoo等子域名
                   else if (currentHostname.endsWith('.yahoo.com')) {
                       allowedKeys = allowedParamsConfig['yahoo.com'];
                   }
                   // 對于Startpage等子域名
                   else if (currentHostname.endsWith('.startpage.com')) {
                       allowedKeys = allowedParamsConfig['startpage.com'];
                   }
              }
      
              // 如果仍然沒有找到匹配的配置,則退出
              if (!allowedKeys) {
                  return;
              }
      
              const originalUrl = new URL(window.location.href);
              const originalParams = originalUrl.searchParams;
      
              // 創建一個新的、干凈的參數對象
              const cleanParams = new URLSearchParams();
      
              // 遍歷允許的參數列表,從原始 URL 中提取它們并添加到新參數對象中
              for (const key of allowedKeys) {
                  if (originalParams.has(key)) {
                      // 使用 getAll 來處理可能重復的參數
                      originalParams.getAll(key).forEach(value => {
                          cleanParams.append(key, value);
                      });
                  }
              }
      
              // --- 路徑特殊處理 ---
              let pathname = originalUrl.pathname;
              if (currentHostname === 'duckduckgo.com') {
                  pathname = '/'; // DuckDuckGo 的搜索結果路徑是根路徑
              }
              // --- 路徑處理結束 ---
      
              const newUrl = originalUrl.origin + pathname + '?' + cleanParams.toString();
      
              // 僅當 URL 確實需要清理時,才更新地址欄
              if (window.location.href !== newUrl) {
                  try {
                      window.history.replaceState(null, null, newUrl);
                      console.log('URL Cleaner (融合版): URL has been simplified to:', newUrl);
                  } catch (e) {
                      // 在某些情況下 replaceState 可能失敗(例如在某些框架內)
                      console.warn('URL Cleaner: Failed to update URL with replaceState', e);
                  }
              }
          }
      
          // 立即執行清理(在文檔開始加載時)
          if (document.readyState === 'loading') {
              window.addEventListener('DOMContentLoaded', cleanUrl);
          } else {
              // 如果腳本在頁面加載后注入,則直接執行
              cleanUrl();
          }
      
          // 使用 Navigation API 或 PopStateEvent 監聽瀏覽器導航和URL變化
          // 這對于現代單頁應用(SPA)的搜索切換非常有效
          // 優先使用更現代的 Navigation API (如果支持)
          if ('navigation' in window) {
              window.navigation.addEventListener('navigate', (event) => {
                  // 簡單判斷是否是搜索相關的導航,可以更精細
                   if (event.destination?.url && Object.keys(allowedParamsConfig).some(domain => event.destination.url.includes(domain))) {
                       // 導航后延遲執行,確保新URL已生效
                       setTimeout(cleanUrl, 100);
                   }
              });
          } else {
              // 降級方案:使用 PopStateEvent 監聽瀏覽器前進后退
              window.addEventListener('popstate', cleanUrl);
          }
      
          // 作為后備,使用一個 MutationObserver 來監聽DOM變化
          // 這對于一些不觸發 popstate 的動態內容加載可能有效
          const observer = new MutationObserver(() => {
              // 防抖,避免頻繁調用
              clearTimeout(observer.timeoutId);
              observer.timeoutId = setTimeout(cleanUrl, 200);
          });
      
          observer.observe(document, { childList: true, subtree: true });
      
      })();
      
      
      posted @ 2025-09-27 09:05  zrc2024  閱讀(29)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费无遮挡无码视频网站| 国产日韩av二区三区| 无套内谢少妇高清毛片| 精品国偷自产在线视频99| 国产精品免费看久久久| 国产69精品久久久久乱码免费 | 成人亚洲欧美一区二区三区| 色悠悠国产精品免费观看| 97精品人妻系列无码人妻| 激情97综合亚洲色婷婷五| 日韩中文字幕高清有码| 怀来县| 国产精品疯狂输出jk草莓视频| 国产盗摄xxxx视频xxxx| 蜜桃av无码免费看永久| 亚洲精品人成网线在线播放va| 亚洲一区二区偷拍精品| 精品人妻av区乱码| 久久精品无码免费不卡| 亚洲最大成人免费av| 一卡2卡三卡4卡免费网站| 成人午夜免费无码视频在线观看| 97久久精品无码一区二区| 又黄又爽又色的免费网站 | 激情偷乱人成视频在线观看| 亚洲色婷婷综合开心网| 亚洲欧美国产精品专区久久| 日韩精品中文字一区二区| 中文字幕在线精品国产| 通江县| 九九热视频在线精品18| 亚洲精品日本一区二区| 国产黄大片在线观看画质优化| 亚洲欧洲日产国产av无码| 色香欲天天影视综合网| 少妇被粗大的猛烈进出视频| 日韩淫片毛片视频免费看| 成人午夜大片免费看爽爽爽| 屯留县| 久久99精品久久久大学生| 永久免费AV无码国产网站|