// ==UserScript==
// @name 聚合搜索引擎切换导航[手机版][移动端]
// @namespace http://tampermonkey.net/
// @version 1.0.9
// @description 在搜索顶部显示一个聚合搜索引擎切换导航,模拟M浏览器的综合搜索引擎。专注手机网页搜索引擎切换,纯粹的搜索。SearchJump、搜索跳转、聚合搜索。
// @author PunkJet
// @home-url https://greasyfork.org/zh-CN/scripts/462130
// @match *://www.baidu.com/s*
// @match *://m.baidu.com/s*
// @match *://m.baidu.com/*/s*
// @include *://www.baidu.com/*/s*
// @include *://m.baidu.com/*/s*
// @match *://duckduckgo.com/*
// @match *://www.google.com/search*
// @match *://www.google.com.hk/search*
// @match *://www.bing.com/search*
// @match *://cn.bing.com/search*
// @match *://www.zhihu.com/search*
// @match *://m.sogou.com/web/searchList.jsp*
// @match *//m.sogou.com/web/*
// @match *://m.douban.com/search*
// @match *://yandex.com/search*
// @match *://quark.sm.cn/s*
// @match *://m.so.com/s*
// @match *://so.toutiao.com/*keyword*
// @match *://fsoufsou.com/search*
// @grant unsafeWindow
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @run-at document-start
// @license MIT
// @downloadURL none
// ==/UserScript==
const searchUrlMap = [
{
name: "必应",
searchUrl: "https://cn.bing.com/search?q=",
searchkeyName: ["q"],
matchUrl:"cn.bing.com",
mark:"Bing",
},
{
name: "百度",
searchUrl: "https://baidu.com/s?wd=",
searchkeyName: ["wd", "word"],
matchUrl:"baidu.com",
mark:"Baidu",
},
{
name: "谷歌",
searchUrl: "https://www.google.com/search?q=",
searchkeyName: ["q"],
matchUrl:"google.com",
mark:"Google",
},
{
name: "知乎",
searchUrl: "https://www.zhihu.com/search?q=",
searchkeyName: ["q"],
matchUrl:"zhihu.com",
mark:"Zhihu",
},
{
name: "豆瓣",
searchUrl: "https://m.douban.com/search/?query=",
searchkeyName: ["query"],
matchUrl:"m.douban.com",
mark:"Douban",
},
{
name: "F搜",
searchUrl: "https://fsoufsou.com/search?q=",
searchkeyName: ["q"],
matchUrl:"fsoufsou.com",
mark:"Fsou",
},
{
name: "360",
searchUrl: "https://m.so.com/s?q=",
searchkeyName: ["q"],
matchUrl:"m.so.com",
mark:"360",
},
{
name: "夸克",
searchUrl: "https://quark.sm.cn/s?q=",
searchkeyName: ["q"],
matchUrl:"quark.sm.cn",
mark:"Quark",
},
{
name: "搜狗",
searchUrl: "https://m.sogou.com/web/searchList.jsp?keyword=",
searchkeyName: ["keyword"],
matchUrl:"m.sogou.com/web",
mark:"Sougou",
},
{
name: "头条",
searchUrl: "https://so.toutiao.com/search/?keyword=",
searchkeyName: ["keyword"],
matchUrl:"so.toutiao.com/",
mark:"Toutiao",
},
{
name: "Yandex",
searchUrl: "https://yandex.com/search/touch/?text=",
searchkeyName: ["text"],
matchUrl:"yandex.com",
mark:"Yandex",
},
{
name: "DuckDuckGo",
searchUrl: "https://duckduckgo.com/?q=",
searchkeyName: ["q"],
matchUrl:"duckduckgo.com",
mark:"DuckDuckGo",
}
];
const punkDeafultMark = "Bing-Baidu-Google-Zhihu-Douban-Fsou-360-Quark-Sougou-Toutiao-Yandex-DuckDuckGo";
function getSearchKeywords(name) {
const url_string = window.location.href;
const url = new URL(url_string);
return url.searchParams.get(name);
}
function getKeywords() {
let keywords = "";
for (let urlItem of searchUrlMap) {
if( window.location.href.indexOf(urlItem.matchUrl) >= 0 ) {
for (let keyItem of urlItem.searchkeyName) {
if ( window.location.href.indexOf(keyItem) >= 0 )
{
keywords = getSearchKeywords(keyItem);
return keywords;
}
}
}
}
return keywords;
}
function addSearchBox() {
const searchBox = document.createElement("div");
searchBox.id = "punk-search-navi-box";
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渲染次数
let showList = GM_getValue("punk_setup_search").split('-');
for (let showListIndex in showList) {
for (let index in searchUrlMap) {
let item = searchUrlMap[index];
if (item.mark == showList[showListIndex]) {
let liItem = document.createElement('li');
let a = document.createElement("a");
a.innerText = item.name;
if ( window.location.href.indexOf(item.matchUrl) >= 0 ) {
a.className = "search-engine-highlight";
}
a.href = item.searchUrl + getKeywords();
liItem.appendChild(a);
fragment.appendChild(liItem);
break;
}
}
}
ulList.appendChild(fragment);
const setBoxDiv = document.createElement("div");
setBoxDiv.id = "search-setting-box";
//setBoxDiv.innerHTML = ``;
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(searchBox);
let btnSet = document.querySelector("#search-setting-box");
btnSet.onclick = function () {
let sss = prompt("输入需要显示的搜索引擎。格式:" + punkDeafultMark);
if (sss) {
GM_setValue("punk_setup_search", sss);
}
//alert("用户设置" + GM_getValue("punk_setup_search"));
}
let btnClose = document.querySelector("#search-close-box");
btnClose.onclick = function () {
searchBox.style = `display:none;`;
}
}
(function () {
"use strict";
const css =
`
#punk-search-navi-box {
opacity:1 !important;
position: fixed;
display: -webkit-flex;
display:flex;
top: 0px;
left: 0px;
width: 100%;
background-color: #FFFFFF !important;
font-size: 15px;
border-radius: 1px;
z-index: 99999;
}
#punk-search-app-box {
flex:1;
width: 0;
}
#search-setting-box {
flex: 0 0 30px;
text-align: center;
margin: auto;
background:url(data:image/png;base64,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) no-repeat center;
background-size:contain;
width:100%;
height:20px;
}
#search-close-box {
flex: 0 0 29px;
text-align: center;
margin: auto;
background:url(data:image/png;base64,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) no-repeat center;
background-size:contain;
width:100%;
height:20px;
}
#punk-search-app-box ul {
margin: 0;
padding: 0;
overflow: hidden;
overflow-x: auto;
list-style: none;
white-space:nowrap;
}
#punk-search-app-box ul::-webkit-scrollbar {
display: none !important;
}
#punk-search-app-box li {
margin-left: 0px;
display: inline-block;
}
#punk-search-app-box ul li a {
display: block;
/*color: #767676 !important;*/
color: #666666 !important;
padding: 8px;
text-decoration: none;
font-weight:bold;
/*background-color: hsla(211, 60%, 35%, .1);*/
font-family:Helvetica Neue,Helvetica,Arial,Microsoft Yahei,Hiragino Sans GB,Heiti SC,WenQuanYi Micro Hei,sans-serif;
}
.search-engine-highlight {
background-color: hsla(211, 60%, 35%, .1) !important;
}
#search-setting-box img{
width: 60%;
height: 60%;
object-fit: cover;
}
#search-close-box img{
width: 60%;
height: 60%;
object-fit: cover;
}
body{
margin-top: 35px !important;
}
.his-wrap-new .fix-wrap {
top:35px !important;
}
`
if (!GM_getValue("punk_setup_search")) {
GM_setValue("punk_setup_search", punkDeafultMark);
}
GM_addStyle(css);
addSearchBox();
})();