// ==UserScript== // @name 聚合搜索引擎切换导航[自改] // @namespace http://tampermonkey.net/ // @icon https://s2.loli.net/2025/03/08/OCtScJhM1biHEfB.png // @version 2025.03.17 // @description 在搜索顶部显示一个聚合搜索引擎切换导航,综合搜索引擎。专注手机网页搜索引擎切换,纯粹的搜索。SearchJumper、搜索跳转、聚合搜索、All Search、Punk Search、搜索切换、搜索酱。 // @author PunkJet、tutrabbit // @include * // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @run-at document-body // @license MIT // @downloadURL none // ==/UserScript== // 默认显示的搜索引擎(按顺序) const punkDeafultMark = "必应-百度-谷歌-头条-F搜-夸克-搜狗-360"; // 支持的全部搜索引擎列表 const punkAllSearchMark = "必应-百度-谷歌-知乎-F搜-360-夸克-搜狗-头条-Yandex-Ecosia-DuckDuckGo-QwantLite-Swisscows"; // 搜索引擎配置数组,定义各搜索引擎的参数 const searchUrlMap = [ { name: "必应", // 显示名称 searchUrl: "https://www.bing.com/search?q=", // 搜索URL模板 searchkeyName: ["q"], // URL中表示搜索关键词的参数名 matchUrl: /bing\.com.*?search\?q=?/g, // 匹配当前URL的正则表达式 name: "必应", }, { name: "百度", searchUrl: "https://baidu.com/s?wd=", searchkeyName: ["wd", "word"], matchUrl: /baidu\.com.*?w(or)?d=?/g, name: "百度", }, { name: "谷歌", searchUrl: "https://www.google.com/search?q=", searchkeyName: ["q"], matchUrl: /google\.com.*?search.*?q=/g, name: "谷歌", }, { name: "知乎", searchUrl: "https://www.zhihu.com/search?q=", searchkeyName: ["q"], matchUrl: /zhihu\.com\/search.*?q=/g, name: "知乎", }, { name: "F搜", searchUrl: "https://fsoufsou.com/search?q=", searchkeyName: ["q"], matchUrl: /fsoufsou\.com\/.*?q=/g, name: "F搜", }, { name: "360", searchUrl: "https://www.so.com/s?q=", searchkeyName: ["q"], matchUrl: /\.so\.com.*?q=/g, name: "360", }, { name: "夸克", searchUrl: "https://quark.sm.cn/s?q=", searchkeyName: ["q"], matchUrl: /sm\.cn.*?q=/g, name: "夸克", }, { name: "搜狗", searchUrl: "https://m.sogou.com/web/searchList.jsp?keyword=", searchkeyName: ["keyword"], matchUrl: /sogou\.com.*?keyword=/g, name: "搜狗", }, { name: "头条", searchUrl: "https://so.toutiao.com/search/?keyword=", searchkeyName: ["keyword"], matchUrl: /toutiao\.com.*?keyword=/g, name: "头条", }, { name: "Yandex", searchUrl: "https://yandex.com/search/touch/?text=", searchkeyName: ["text"], matchUrl: /((ya(ndex)?\.ru)|(yandex\.com)).*?text=/g, mark: "Yandex", }, { name: "DuckDuckGo", searchUrl: "https://duckduckgo.com/?q=", searchkeyName: ["q"], matchUrl: /duckduckgo\.com.*?q=/g, mark: "DuckDuckGo", }, { name: "Ecosia", searchUrl: "https://www.ecosia.org/search?q=", searchkeyName: ["q"], matchUrl: /ecosia\.org.*?q=/g, mark: "Ecosia", }, { name: "QwantLite", searchUrl: "https://lite.qwant.com/?q=", searchkeyName: ["q"], matchUrl: /lite\.qwant\.com.*?q=/g, mark: "QwantLite", }, { name: "Swisscows", searchUrl: "https://swisscows.com/en/web?query=", searchkeyName: ["query"], matchUrl: /swisscows\.com.*?query=/g, mark: "Swisscows", }, ]; const punkSocialMap = [ { tabName: "日常", tabList: [ { name: "知乎", searchUrl: "https://www.zhihu.com/search?q=" }, { name: "豆瓣", searchUrl: "https://m.douban.com/search/?query=" }, { name: "微博", searchUrl: "https://m.weibo.cn/search?containerid=100103&q=", }, { name: "哔哩哔哩", searchUrl: "https://m.bilibili.com/search?keyword=" }, { name: "维基百科", searchUrl: "https://zh.m.wikipedia.org/wiki/" }, { name: "安娜的档案", searchUrl: "https://annas-archive.org/search?q=" }, { name: "Unsplash", searchUrl: "https://unsplash.com/s/photos/" }, { name: "火山翻译", searchUrl: "https://translate.volcengine.com/mobile?text=", }, { name: "博客园", searchUrl: "https://zzk.cnblogs.com/s?w=" }, ], }, { tabName: "娱乐", tabList: [ { name: "知乎", searchUrl: "https://www.zhihu.com/search?q=" }, { name: "豆瓣", searchUrl: "https://m.douban.com/search/?query=" }, { name: "微博", searchUrl: "https://m.weibo.cn/search?containerid=100103&q=", }, { name: "哔哩哔哩", searchUrl: "https://m.bilibili.com/search?keyword=" }, { name: "小红书", searchUrl: "https://m.sogou.com/web/xiaohongshu?keyword=", }, { name: "微信文章", searchUrl: "https://weixin.sogou.com/weixinwap?type=2&query=", }, { name: "推特", searchUrl: "https://mobile.twitter.com/search/" }, { name: "豆瓣阅读", searchUrl: "https://read.douban.com/search?q=" }, { name: "Malavida", searchUrl: "https://www.malavida.com/en/android/s/" }, { name: "ApkPure", searchUrl: "https://m.apkpure.com/search?q=" }, { name: "安娜的档案", searchUrl: "https://annas-archive.org/search?q=" }, { name: "人人影视", searchUrl: "https://www.renren.pro/search?wd=" }, { name: "豌豆Pro", searchUrl: "https://wandou.la/search/" }, ], }, { tabName: "开发", tabList: [ { name: "开发者搜索", searchUrl: "https://kaifa.baidu.com/searchPage?wd=", }, { name: "GitHub", searchUrl: "https://github.com/search?q=" }, { name: "Gitee", searchUrl: "https://search.gitee.com/?q=" }, { name: "Stackoverflow", searchUrl: "https://stackoverflow.com/search?q=", }, { name: "GreasyFork", searchUrl: "https://greasyfork.org/scripts?q=" }, { name: "MDN", searchUrl: "https://developer.mozilla.org/search?q=" }, { name: "菜鸟教程", searchUrl: "https://www.runoob.com/?s=" }, { name: "掘金", searchUrl: "https://juejin.cn/search?query=" }, { name: "博客园", searchUrl: "https://zzk.cnblogs.com/s?w=" }, ], }, { tabName: "网盘", tabList: [ { name: "阿里云盘", searchUrl: "https://alipansou.com/search?k=" }, { name: "百度云盘", searchUrl: "https://xiongdipan.com/search?k=" }, { name: "夸克网盘", searchUrl: "https://aipanso.com/search?k=" }, { name: "罗马网盘", searchUrl: "https://www.luomapan.com/#/main/search?keyword=", }, ], }, { tabName: "翻译", tabList: [ { name: "有道词典", searchUrl: "https://youdao.com/m/result?word=" }, { name: "必应翻译", searchUrl: "https://cn.bing.com/dict/search?q=" }, { name: "百度翻译", searchUrl: "https://fanyi.baidu.com/#zh/en/" }, { name: "谷歌翻译", searchUrl: "https://translate.google.com/?q=" }, { name: "火山翻译", searchUrl: "https://translate.volcengine.com/mobile?text=", }, { name: "DeepL翻译", searchUrl: "https://www.deepl.com/translator-mobile#zh/en/", }, ], }, { tabName: "图片", tabList: [ { name: "谷歌搜图", searchUrl: "https://www.google.com.hk/search?tbm=isch&q=", }, { name: "必应搜图", searchUrl: "https://www.bing.com/images/search?q=" }, { name: "Flickr", searchUrl: "http://www.flickr.com/search/?q=" }, { name: "Pinterest", searchUrl: "https://www.pinterest.com/search/pins/?q=", }, { name: "Pixabay", searchUrl: "https://pixabay.com/zh/images/search/" }, { name: "花瓣", searchUrl: "https://huaban.com/search/?q=" }, { name: "Unsplash", searchUrl: "https://unsplash.com/s/photos/" }, ], }, ]; /** * 从当前URL中提取搜索关键词 * @return {string} 提取到的关键词字符串,未找到时返回空字符串 */ function getKeywords() { let keywords = ""; for (let urlItem of searchUrlMap) { if (window.location.href.match(urlItem.matchUrl) != null) { for (let keyItem of urlItem.searchkeyName) { if (window.location.href.indexOf(keyItem) >= 0) { let url = new URL(window.location.href); keywords = url.searchParams.get(keyItem); return keywords; } } } } return keywords; } /** * 创建并添加搜索框展开按钮 * 该按钮初始为隐藏状态,用于在移动端展开搜索导航栏 */ function addOpenSearchBox() { const oDivtemp = document.createElement("div"); oDivtemp.id = "punk-search-open-box"; oDivtemp.style.display = "none"; document.getElementById("punkjet-search-box").after(oDivtemp); } /** * 为标签页添加点击切换功能 * 实现标签页的内容切换和样式变化 */ function addTabfunction() { var tab_list = document.querySelector("#punk-tablist"); var lis = tab_list.querySelectorAll("li"); var items = document.querySelectorAll(".punk-item"); for (var i = 0; i < lis.length; i++) { lis[i].setAttribute("index", i); lis[i].onclick = function () { for (var i = 0; i < lis.length; i++) { lis[i].className = ""; } this.className = "punk-current"; var index = this.getAttribute("index"); for (i = 0; i < items.length; i++) { items[i].style.display = "none"; } items[index].style.display = "block"; }; } } /** * 创建单个标签页及其内容 * @param {HTMLElement} node - 要添加标签页的父节点 * @param {Array} tabList - 标签页配置数组 * @return {HTMLElement} 返回创建好的标签页节点 */ function addSingleTab(node, tabList) { var ulList = document.createElement("ul"); node.appendChild(ulList); let fragment = document.createDocumentFragment(); //创建一个文档碎片,减少DOM渲染次数 for (let index = 0; index < tabList.length; index++) { let liItem = document.createElement("li"); liItem.innerHTML = `${tabList[index].name}`; fragment.appendChild(liItem); } ulList.appendChild(fragment); return node; } /** * 创建并添加聚合搜索跳转面板 * 包含全部搜索引擎、分类标签页和排序设置功能 */ function addJumpSearchBox() { const searchJumpBox = document.createElement("div"); searchJumpBox.id = "punk-search-jump-box"; searchJumpBox.style.display = "none"; document.getElementById("punkjet-search-box").appendChild(searchJumpBox); const searchAllBox = document.createElement("div"); searchAllBox.id = "punk-search-all-app"; searchJumpBox.appendChild(searchAllBox); let jumpAllSearchTitle = document.createElement("h1"); jumpAllSearchTitle.innerText = "✰全部搜索引擎"; searchAllBox.appendChild(jumpAllSearchTitle); addSingleTab(searchAllBox, searchUrlMap); const punkTabList = document.createElement("div"); punkTabList.id = "punk-tablist"; let jumpSocialTitle = document.createElement("h1"); jumpSocialTitle.innerText = "@社交网络"; punkTabList.appendChild(jumpSocialTitle); var ulListq = document.createElement("ul"); punkTabList.appendChild(ulListq); let fragmentq = document.createDocumentFragment(); //创建一个文档碎片,减少DOM渲染次数 for (let index = 0; index < punkSocialMap.length; index++) { let liItemq = document.createElement("li"); if (index == 0) { liItemq.className = "punk-current"; } liItemq.innerText = punkSocialMap[index].tabName; fragmentq.appendChild(liItemq); } ulListq.appendChild(fragmentq); searchJumpBox.appendChild(punkTabList); const punkTabListcontent = document.createElement("div"); punkTabListcontent.className = "tab-content"; let fragmentr = document.createDocumentFragment(); //创建一个文档碎片,减少DOM渲染次数 for (let index = 0; index < punkSocialMap.length; index++) { let liItemr = document.createElement("div"); liItemr.className = "punk-item"; if (index == 0) { liItemr.style.display = `block`; } else { liItemr.style.display = `none`; } liItemr = addSingleTab(liItemr, punkSocialMap[index].tabList); fragmentr.appendChild(liItemr); } punkTabListcontent.appendChild(fragmentr); searchJumpBox.appendChild(punkTabListcontent); let jumpSortTitle = document.createElement("h1"); jumpSortTitle.innerText = "■搜索引擎排序"; searchJumpBox.appendChild(jumpSortTitle); let jumpSortDesc = document.createElement("div"); jumpSortDesc.className = "jump-sort-discription"; searchJumpBox.appendChild(jumpSortDesc); jumpSortDesc.innerHTML = `说明:除搜索引擎,其他站只跳转无导航
支持的格式:${punkAllSearchMark}
`; let punkJumpButton = document.createElement("button"); punkJumpButton.innerText = "点击输入排序"; punkJumpButton.className = "punk-jump-sort-btn"; searchJumpBox.appendChild(punkJumpButton); punkJumpButton.onclick = function () { let sss = prompt( "请输入需要显示的引擎!\n格式举例:Quark-Zhihu-Toutiao-360\n则导航为:夸克、知乎、头条、360", GM_getValue("punk_setup_search") || punkDeafultMark ); if (sss) { GM_setValue("punk_setup_search", sss); setTimeout(function () { location.reload(); }, 200); } //console.log("用户设置:" + GM_getValue("punk_setup_search")); }; let punkJumpClose = document.createElement("button"); punkJumpClose.innerText = "收起"; punkJumpClose.className = "punk-jump-sort-btn"; searchJumpBox.appendChild(punkJumpClose); punkJumpClose.onclick = function () { document.getElementById("punk-search-jump-box").style.display = `none`; }; } /** * 处理所有搜索相关元素的点击事件 * 包括展开/收起搜索栏、设置按钮和关闭按钮的功能 */ function punkSearchClickFunction() { let btnPunkOpen = document.querySelector("#punk-search-open-box"); btnPunkOpen.onclick = function () { var x = document.getElementById("punkjet-search-box"); if (x.style.display == "none") { x.style.display = "block"; document.getElementsByTagName("body")[0].style = "margin-top: 35px !important;"; btnPunkOpen.style.display = "none"; } else { x.style.display = "none"; document.getElementsByTagName("body")[0].style = "margin-top: 0px !important;"; } document .getElementsByClassName("_search-sticky-bar")[0] .style.setProperty("top", "34px", "important"); }; let btnSet = document.querySelector("#search-setting-box"); btnSet.onclick = function () { var punkjump = document.getElementById("punk-search-jump-box"); if (punkjump.style.display === "none") { punkjump.style.display = "block"; } else { punkjump.style.display = `none`; } }; let btnClose = document.querySelector("#search-close-box"); btnClose.onclick = function () { var x = document.getElementById("punk-search-open-box"); if (x.style.display === "none") { x.style.display = "block"; } document.querySelector("#punkjet-search-box").style.display = `none`; document.getElementsByTagName("body")[0].style = "margin-top: 0px !important;"; document .getElementsByClassName("_search-sticky-bar")[0] .style.setProperty("top", "0px", "important"); }; } function addSearchBox() { const punkJetBox = document.createElement("div"); punkJetBox.id = "punkjet-search-box"; punkJetBox.style.display = "none"; punkJetBox.style.fontSize = "15px"; const searchBox = document.createElement("div"); searchBox.id = "punk-search-navi-box"; punkJetBox.appendChild(searchBox); const appBoxDiv = document.createElement("div"); appBoxDiv.id = "punk-search-app-box"; searchBox.appendChild(appBoxDiv); var ulList = document.createElement("ul"); appBoxDiv.appendChild(ulList); let fragment = document.createDocumentFragment(); //创建一个文档碎片,减少DOM渲染次数 // 合并搜索引擎和社交站点数据 const combinedSearchMap = [...searchUrlMap]; // 展开社交分类中的每个站点并添加独立mark punkSocialMap.forEach((category) => { category.tabList.forEach((tab) => { combinedSearchMap.push({ ...tab, category: category.tabName, // 保留分类信息 }); }); }); let showList = GM_getValue("punk_setup_search").split("-"); for ( let showListIndex = 0; showListIndex < showList.length; showListIndex++ ) { // 先在搜索引擎列表查找 let found = false; for (let index = 0; index < combinedSearchMap.length; index++) { let item = combinedSearchMap[index]; // 处理社交站点(带分类信息的) if (item.category && item.name === showList[showListIndex]) { let liItem = document.createElement("li"); liItem.innerHTML = `${item.name}`; fragment.appendChild(liItem); found = true; break; } if (item.name == showList[showListIndex]) { // 处理普通搜索引擎 let liItem = document.createElement("li"); let linkColor = "#5C6BC0"; // 如果是分类显示为紫色 if (item.isCategory) { linkColor = "#9C27B0"; } else if (window.location.href.match(item.matchUrl) != null) { linkColor = "#5C6BC0"; } liItem.innerHTML = `${item.name}`; fragment.appendChild(liItem); found = true; break; } } } ulList.appendChild(fragment); const setBoxDiv = document.createElement("div"); setBoxDiv.id = "search-setting-box"; setBoxDiv.innerHTML = `⚙️`; searchBox.appendChild(setBoxDiv); const closeBoxDiv = document.createElement("div"); closeBoxDiv.id = "search-close-box"; closeBoxDiv.innerHTML = ``; searchBox.appendChild(closeBoxDiv); document.getElementsByTagName("head")[0].after(punkJetBox); } function funcTouchStart(state) { var myNodelist = document.querySelectorAll("*"); //console.log("length is "+ myNodelist.length); for (var i = 0; i < myNodelist.length; i++) { let style = window.getComputedStyle(myNodelist[i], null); if (style.getPropertyValue("position") === "fixed") { if (style.getPropertyValue("z-index") != "9999999") { //console.log(myNodelist[i]); if (style.getPropertyValue("top") === "0px") { if ( document.getElementById("punkjet-search-box").style.display == "block" ) { myNodelist[i].style.top = "35px"; } } else if (style.getPropertyValue("top") === "35px") { if ( document.getElementById("punkjet-search-box").style.display == "none" ) { myNodelist[i].style.top = "0px"; } } } } else if (style.getPropertyValue("top") === "35px") { myNodelist[i].style.top = "0px"; } } } function funcPopState() { var myNodelist = document.querySelectorAll("*"); //console.log("length is "+ myNodelist.length); for (var i = 0; i < myNodelist.length; i++) { let style = window.getComputedStyle(myNodelist[i], null); if (style.getPropertyValue("position") != "fixed") { if (style.getPropertyValue("top") === "35px") { myNodelist[i].style.top = "0px"; } } } } function punkAddUrl() { setTimeout(function () { funcTouchStart(); }, 200); window.addEventListener("touchstart", function () { setTimeout(function () { funcTouchStart(); }, 550); }); window.addEventListener("popstate", function () { setTimeout(function () { funcPopState(); }, 100); }); let aElement = document.querySelectorAll("#punk-url-a"); for (let value of aElement) { value.addEventListener("click", function () { value.setAttribute("href", value.getAttribute("url") + getKeywords()); }); value.addEventListener("contextmenu", function () { value.setAttribute("href", value.getAttribute("url") + getKeywords()); }); } } /** * 动态注入搜索组件所需的CSS样式 * 使用JavaScript创建style标签来确保样式隔离 */ function injectStyle() { const css = ` #punkjet-search-box { position: fixed; flex-direction: column; top: 0; left: 0px; width: 100%; height: 35px; background-color: #ffffff !important; font-size: 15px; z-index: 9999999; justify-content: flex-end; } #punk-search-navi-box { display: -webkit-flex; display: flex; width: 100%; height: 35px; } #punk-search-jump-box { padding: 8px; background-color: #ffffff !important; max-width: 480px; float: right; max-height: calc(80vh); overflow: scroll; box-shadow: 0px 0px 1px 0px #000000; -ms-overflow-style: none; scrollbar-width: none; } #punk-search-jump-box::-webkit-scrollbar { display: none; } #punk-search-app-box { flex: 1; width: 0; display: flex; align-items: center; justify-content: center; } #punk-need-hide-box { flex: 1; width: 0; display: flex; } #search-setting-box { flex: 0 0 30px; text-align: center; margin: auto; width: 100%; height: 18px; font-size: 18px; } #search-close-box { flex: 0 0 29px; text-align: center; margin: auto; width: 100%; height: 18px; font-size: 18px; } #punk-search-app-box ul { margin: 0; padding: 0; overflow: hidden; overflow-x: auto; list-style: none; white-space: nowrap; height: 35px; } #punk-search-app-box ul::-webkit-scrollbar { display: none !important; } #punk-search-app-box li { margin-left: 0px; display: inline-block; border-radius: 2px; vertical-align: middle; } #punk-search-app-box ul li a { display: block; color: #666666 !important; padding: 8px; text-decoration: none; font-weight: bold; font-size: 15px !important; font-family: Helvetica Neue, Helvetica, Arial, Microsoft Yahei, Hiragino Sans GB, Heiti SC, WenQuanYi Micro Hei, sans-serif; } #punk-search-open-box { position: fixed; left: 22px; bottom: 64px; height: 36px; width: 36px; font-size: 15px; text-align: center; padding: 10px; border-radius: 5px; z-index: 9999998; background: url("data:image/svg+xml;utf8,%3Csvg width='48' height='48' xmlns='http://www.w3.org/2000/svg' stroke='null' style='vector-effect:non-scaling-stroke;' fill='none'%3E%3Cg id='Layer_1'%3E%3Ctitle%3ELayer 1%3C/title%3E%3Cpath stroke='%23000' id='svg_5' d='m1.97999,23.9675l0,0c0,-12.42641 10.0537,-22.5 22.45556,-22.5l0,0c5.95558,0 11.66724,2.37053 15.87848,6.5901c4.21123,4.21957 6.57708,9.94253 6.57708,15.9099l0,0c0,12.4264 -10.05369,22.5 -22.45555,22.5l0,0c-12.40186,0 -22.45556,-10.07359 -22.45556,-22.5zm22.45556,-22.5l0,45m-22.45556,-22.5l44.91111,0' stroke-width='0' fill='%23005fbf'/%3E%3Cpath stroke='%23000' id='svg_7' d='m13.95011,18.65388l0,0l0,-0.00203l0,0.00203zm0.00073,-0.00203l4.2148,5.84978l-4.21553,5.84775l1.54978,2.15123l5.76532,-8l-5.76532,-8l-1.54905,2.15123zm7.46847,13.70285l10.5308,0l0,-3.03889l-10.5308,0l0,3.03889zm3.16603,-6.33312l7.36476,0l0,-3.03889l-7.36476,0l0,3.03889zm-3.16603,-9.37302l0,3.04091l10.5308,0l0,-3.04091l-10.5308,0z' stroke-width='0' fill='%23ffffff'/%3E%3Cpath id='svg_8' d='m135.44834,59.25124l0,0l0,-0.00001l0,0.00001zm0.00004,-0.00001l0.23416,0.02887l-0.2342,0.02886l0.0861,0.01062l0.3203,-0.03948l-0.3203,-0.03948l-0.08606,0.01062zm0.41492,0.06762l0.58504,0l0,-0.015l-0.58504,0l0,0.015zm0.17589,-0.03125l0.40915,0l0,-0.015l-0.40915,0l0,0.015zm-0.17589,-0.04625l0,0.01501l0.58504,0l0,-0.01501l-0.58504,0z' stroke-width='0' stroke='%23000' fill='%23ffffff'/%3E%3C/g%3E%3C/svg%3E") no-repeat center; background-size: contain; } #punk-search-open-box, ::after, ::before { box-sizing: initial !important; } #punk-search-jump-box h1 { font-size: 15px !important; color: #444444 !important; font-weight: bold; margin: 7px 4px; } #punk-search-jump-box ul { margin-left: 0px; padding: 0; overflow: hidden; overflow-x: auto; list-style: none; } #punk-search-jump-box li { margin: 4px; display: inline-block; vertical-align: middle; border-radius: 2px; background-color: hsla(204, 48%, 14%, 0.1) !important; } #punk-search-jump-box a { display: block; color: #263238 !important; padding: 3px; margin: 2px; font-size: 14px; text-decoration: none; font-family: Helvetica Neue, Helvetica, Arial, Microsoft Yahei, Hiragino Sans GB, Heiti SC, WenQuanYi Micro Hei, sans-serif; } .jump-sort-discription { margin: 5px 4px; } .punk-jump-sort-btn { background-color: #0026a69a; border: none; color: white; padding: 8px 64px; text-align: center; text-decoration: none; display: inline-block; font-size: 13px; margin: 4px 5px; cursor: pointer; border-radius: 4px; width: 97%; } body { margin-top: 0px !important; position: relative !important; } ._search-sticky-bar { top: 34px !important; } ._2Ldjm { top: 34px !important; } #punk-tablist { height: 65px; margin-top: 20px; } #punk-tablist li { float: left; height: 18px; background-color: hsla(0, 100%, 100%, 0) !important; color: #666666 !important; text-align: center; cursor: pointer; margin: 4px 8px; } #punk-tablist ul { height: 39px; } .punk-current { text-decoration: underline 3px #0026a69a; text-underline-offset: 0.4em; } .punk-current li { color: #0026a69a !important; } .tab-content { margin-bottom: 20px; } `; const cssNode = document.createElement("style"); cssNode.setAttribute("type", "text/css"); cssNode.appendChild(document.createTextNode(css)); document.getElementById("punkjet-search-box").appendChild(cssNode); } (function () { "use strict"; let isSearchPage = false; for (let index = 0; index < searchUrlMap.length; index++) { if (window.location.href.match(searchUrlMap[index].matchUrl) != null) { isSearchPage = true; if (getKeywords() != null) { if (!GM_getValue("punk_setup_search")) { GM_setValue("punk_setup_search", punkDeafultMark); } addSearchBox(); addJumpSearchBox(); addOpenSearchBox(); punkSearchClickFunction(); addTabfunction(); injectStyle(); punkAddUrl(); // 在搜索页面上默认显示导航栏 document.getElementById("punkjet-search-box").style.display = "block"; } break; } } // 如果不是搜索页面,添加文本选中监听并默认隐藏导航栏 if (!isSearchPage) { document.getElementById("punkjet-search-box").style.display = "none"; if (!GM_getValue("punk_setup_search")) { GM_setValue("punk_setup_search", punkDeafultMark); } addSearchBox(); addJumpSearchBox(); addOpenSearchBox(); punkSearchClickFunction(); addTabfunction(); injectStyle(); // 监听文本选中事件 document.addEventListener('selectionchange', function() { const selection = window.getSelection().toString().trim(); const searchBox = document.getElementById("punkjet-search-box"); if (selection) { // 如果有选中文本 // 显示导航栏 searchBox.style.display = "block"; // 更新所有搜索链接 const links = document.querySelectorAll('#punk-url-a'); links.forEach(link => { const baseUrl = link.getAttribute('url'); link.setAttribute('href', baseUrl + encodeURIComponent(selection)); }); } else { // 如果没有选中文本 // 隐藏导航栏 searchBox.style.display = "none"; } }); } })();