// ==UserScript==
// @name 聚合索引
// @namespace http://tampermonkey.net/
// @version v1.08
// @description 支持位置切换的聚合搜索引擎导航栏
// @author summer
// @match *://*/*q=*
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @require https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/js/all.min.js
// @license MIT
// ==/UserScript==
// 初始化配置
const defaultConfig = {
position: GM_getValue('navPosition', 'bottom'), // top/bottom
lastUpdate: Date.now()
};
// 添加Font Awesome CSS
const faCSS = document.createElement('link');
faCSS.rel = 'stylesheet';
faCSS.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css';
document.head.appendChild(faCSS);
// 动态样式
GM_addStyle(`
.search-bar {
position: fixed;
left: 50%;
transform: translateX(-50%);
background: rgba(255,255,255,0.95);
padding: 12px;
border-radius: 24px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
display: flex;
gap: 1rem;
z-index: 9999;
transition: all 0.3s ease;
}
/* 底部定位 */
.search-bar.bottom-bar {
bottom: 0;
border-radius: 24px 24px 0 0;
}
/* 顶部定位 */
.search-bar.top-bar {
top: 0;
border-radius: 0 0 24px 24px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.search-btn {
background: none;
border: none;
padding: 8px 16px;
border-radius: 20px;
cursor: pointer;
transition: all 0.2s;
display: flex;
align-items: center;
gap: 8px;
font-family: 'Microsoft YaHei', sans-serif;
}
.active-engine {
background: #007bff!important;
color: white!important;
}
`);
const searchEngines = [
{
name: "Google",
icon: "fab fa-google",
domain: "google.com",
urlTemplate: "https://www.google.com/search?q=%s"
},
{
name: "Bing",
icon: "fab fa-microsoft",
domain: "bing.com",
urlTemplate: "https://www.bing.com/search?q=%s"
},
{
name: "度ds",
icon: "fas fa-comment",
domain: "chat.baidu.com",
urlTemplate: "https://chat.baidu.com/search?word=%s"
},
{
name: "秘塔AI",
icon: "fas fa-search-plus",
domain: "metaso.cn",
urlTemplate: "https://metaso.cn/?s=&q=%s"
},
{
name: "Kimi",
icon: "fas fa-comment-alt",
domain: "kimi.moonshot.cn",
urlTemplate: "https://kimi.moonshot.cn/_prefill_chat?send_immediately=true&prefill_prompt=%s"
},
{
name: "百度",
icon: "fab fa-baidu",
domain: "baidu.com",
urlTemplate: "https://www.baidu.com/s?wd=%s"
},
];
// 位置切换功能
function togglePosition() {
const current = GM_getValue('navPosition', 'bottom');
const newPos = current === 'bottom' ? 'top' : 'bottom';
GM_setValue('navPosition', newPos);
applyPosition();
}
function applyPosition() {
const bar = document.querySelector('.search-bar');
if (!bar) return;
const position = GM_getValue('navPosition', 'bottom');
bar.classList.remove('bottom-bar', 'top-bar');
bar.classList.add(`${position}-bar`);
}
// 创建导航栏
function createSearchBar() {
const currentUrl = new URL(window.location.href);
const bar = document.createElement('div');
bar.className = `search-bar ${defaultConfig.position}-bar`;
searchEngines.forEach(engine => {
const btn = document.createElement('button');
btn.className = `search-btn ${currentUrl.host.includes(engine.domain) ? 'active-engine' : ''}`;
btn.innerHTML = `<i class="${engine.icon}"></i><span>${engine.name}</span>`;
btn.onclick = () => {
const query = encodeURIComponent(getSearchQuery());
window.location.href = engine.urlTemplate.replace('%s', query);
};
bar.appendChild(btn);
});
document.body.appendChild(bar);
GM_registerMenuCommand("切换导航栏位置", togglePosition);
}
// 获取搜索关键词
function getSearchQuery() {
const queryKeys = ['q', 'query', 'search', 'wd', 'keyword'];
const urlParams = new URLSearchParams(window.location.search);
return queryKeys.map(k => urlParams.get(k)).find(v => v);
}
// 初始化
window.addEventListener('load', () => {
if (getSearchQuery()) {
createSearchBar();
applyPosition();
}
});