使用油猴腳本去除瀏覽器搜索的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 });
})();



浙公網安備 33010602011771號