// ==UserScript==
// @name Google搜索增强工具箱
// @namespace https://greasyfork.org/users/0
// @version 1
// @license MIT
// @description Google搜索增强:时间过滤/快速语法/网址直达/精确搜索
// @icon https://www.google.com/favicon.ico
// @author YourName
// @match *://www.google.com/search*
// @match *://www.google.com.hk/search*
// @match *://www.google.co.jp/search*
// @grant GM_addStyle
// @grant GM_openInTab
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-end
// @downloadURL https://update.greasyfork.icu/scripts/529549/Google%E6%90%9C%E7%B4%A2%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7%E7%AE%B1.user.js
// @updateURL https://update.greasyfork.icu/scripts/529549/Google%E6%90%9C%E7%B4%A2%E5%A2%9E%E5%BC%BA%E5%B7%A5%E5%85%B7%E7%AE%B1.meta.js
// ==/UserScript==
(function() {
'use strict';
// 调试模式开关
const DEBUG_MODE = false;
const log = DEBUG_MODE ? console.log : function() {};
/* ========== 样式注入 ========== */
GM_addStyle(`
#ge-toolbox {
position: fixed;
right: 20px;
bottom: 20px; /* 调整到右下角 */
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.15);
width: 280px;
z-index: 2147483647;
font-family: 'Segoe UI', Arial, sans-serif;
padding: 15px;
transition: opacity 0.3s;
background-image: url('${GM_getValue('backgroundImage', 'https://images.pexels.com/photos/31042830/pexels-photo-31042830.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2')}');
background-size: cover;
opacity: ${GM_getValue('backgroundOpacity', '1')};
}
.ge-section {
margin: 12px 0;
padding: 8px 0;
border-bottom: 1px solid #eee;
}
.ge-title {
color: #1a0dab;
font-weight: 500;
font-size: 15px;
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 6px;
}
.ge-select {
width: 100%;
padding: 6px 8px;
border: 1px solid #dfe1e5;
border-radius: 4px;
background: #fff;
margin: 4px 0;
font-size: 13px;
}
.ge-btn {
background: #1a73e8;
color: #fff;
border: none;
padding: 6px 12px;
border-radius: 4px;
cursor: pointer;
font-size: 13px;
margin-top: 8px;
}
.ge-chip {
display: inline-block;
background: #f8f9fa;
border: 1px solid #dadce0;
border-radius: 16px;
padding: 4px 12px;
margin: 3px;
font-size: 12px;
cursor: pointer;
transition: all 0.2s;
}
.ge-chip:hover {
background: #e8f0fe;
border-color: #d2e3fc;
}
#ge-quickurl, #ge-keyword {
width: 100%;
padding: 6px;
border: 1px solid #dfe1e5;
border-radius: 4px;
margin: 8px 0;
font-size: 13px;
}
#ge-bg-btn {
position: absolute;
top: 10px;
right: 10px;
background: #f1f3f4;
border: 1px solid #dadce0;
border-radius: 4px;
padding: 4px 8px;
cursor: pointer;
font-size: 12px;
}
`);
/* ========== 核心功能 ========== */
const initToolbox = () => {
// 确保只注入一次
if (document.getElementById('ge-toolbox')) return;
const html = `
⌛ 时间过滤
🔍 搜索语法
site:
filetype:
inurl:
intitle:
排除(-)
imagesize:
location:
`;
const div = document.createElement('div');
div.id = 'ge-toolbox';
div.innerHTML = html;
document.body.appendChild(div);
// 事件绑定
document.getElementById('ge-time').addEventListener('change', handleTimeFilter);
document.querySelectorAll('.ge-chip').forEach(chip => {
chip.addEventListener('click', handleSearchSyntax);
});
document.getElementById('ge-search-range').addEventListener('change', handleSearchRange);
document.getElementById('ge-openurl').addEventListener('click', handleQuickUrl);
document.getElementById('ge-bg-btn').addEventListener('click', handleBgSettings);
// 为关键字输入框添加回车键监听事件
const keywordInput = document.getElementById('ge-keyword');
keywordInput.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
handleKeywordSearch();
}
});
// 为网址输入框添加回车键监听事件
const urlInput = document.getElementById('ge-quickurl');
urlInput.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
handleQuickUrl();
}
});
};
/* ========== 功能实现 ========== */
// 时间过滤器
const handleTimeFilter = (e) => {
const tbsMap = {
'h_1': 'qdr:h',
'd_1': 'qdr:d',
'w_1': 'qdr:w',
'y_1': 'qdr:y',
'custom': 'cdr:1'
};
const value = e.target.value;
const url = new URL(window.location.href);
if (value === 'custom') {
const start = prompt('起始日期 (YYYY-MM-DD):', '');
const end = prompt('结束日期 (YYYY-MM-DD):', '');
if (start && end) {
url.searchParams.set('tbs', `cdr:1,cd_min:${start},cd_max:${end}`);
}
} else if (value) {
url.searchParams.set('tbs', tbsMap[value]);
} else {
url.searchParams.delete('tbs');
}
window.location.href = url.toString();
};
// 搜索语法助手
const handleSearchSyntax = (e) => {
const cmd = e.target.dataset.cmd;
const searchInput = document.querySelector('textarea[name="q"], input[name="q"]');
if (!searchInput) {
alert('未找到搜索输入框!');
return;
}
const param = prompt(`请输入 ${cmd} 参数:\n\nsite:example.com\nfiletype:pdf\ninurl:keyword\nintitle:keyword\n-imagesize:800x600\nlocation:city`, '');
if (param) {
searchInput.value = ` ${cmd}${param}`;
}
searchInput.focus();
searchInput.dispatchEvent(new Event('input', { bubbles: true }));
};
// 搜索范围助手
const handleSearchRange = (e) => {
const value = e.target.value;
const searchInput = document.querySelector('textarea[name="q"], input[name="q"]');
if (!searchInput) {
alert('未找到搜索输入框!');
return;
}
if (value === 'exact') {
searchInput.value = `"${searchInput.value.trim()}"`;
}
searchInput.focus();
searchInput.dispatchEvent(new Event('input', { bubbles: true }));
};
// 快速网址访问
const handleQuickUrl = () => {
const urlInput = document.getElementById('ge-quickurl');
let url = urlInput.value.trim();
if (url) {
// URL格式化
if (!/^https?:\/\//i.test(url)) {
url = url.startsWith('//') ? `https:${url}` : `https://${url}`;
}
try {
new URL(url); // 验证URL有效性
GM_openInTab(url, { active: false });
urlInput.value = '';
} catch (e) {
alert('无效的网址格式!');
}
}
};
// 关键字搜索
const handleKeywordSearch = () => {
const keywordInput = document.getElementById('ge-keyword');
let keyword = keywordInput.value.trim(); // 获取关键字
if (keyword) {
const searchUrl = `https://www.google.com/search?q=${encodeURIComponent(keyword)}`;
GM_openInTab(searchUrl, { active: false });
keywordInput.value = '';
}
};
// 背景设置
const handleBgSettings = () => {
const opacity = prompt('请输入背景透明度 (0-1):', GM_getValue('backgroundOpacity', '1'));
const imageUrl = prompt('请输入背景图片URL:', GM_getValue('backgroundImage', 'https://images.pexels.com/photos/31042830/pexels-photo-31042830.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2'));
if (opacity) GM_setValue('backgroundOpacity', opacity);
if (imageUrl) GM_setValue('backgroundImage', imageUrl);
const toolbox = document.getElementById('ge-toolbox');
toolbox.style.opacity = opacity;
toolbox.style.backgroundImage = `url(${imageUrl})`;
};
/* ========== 初始化 ========== */
const waitForPageLoad = () => {
// 确保搜索框存在
if (document.querySelector('input[name="q"], textarea[name="q"]')) {
initToolbox();
log('[Google增强工具箱] 初始化成功');
} else {
setTimeout(waitForPageLoad, 500);
}
};
// 启动入口
if (document.readyState === 'complete') {
waitForPageLoad();
} else {
window.addEventListener('load', waitForPageLoad);
}
})();