// ==UserScript==
// @name Search Switcher
// @name:zh-CN 一键切换搜索
// @name:zh-TW 壹鍵切換搜索
// @description Add links to each other in search engines. Including multiple search modes.
// @description:zh-CN 在常用的搜索引擎页面中添加互相切换的按钮。
// @description:zh-TW 在常用的搜索引擎頁面中添加互相切換的按鈕。
// @author XanderWang
// @icon https://i.loli.net/2020/05/29/DxSmHAy2o53FdUY.png
// @license GPL-3.0
// @include www.baidu.com/*
// @include *.so.com/*
// @include *.bing.com/*
// @include *.zhihu.com/search?*
// @include *.soku.com/*
// @include *.sogou.com/*
// @include /^https?://[a-z]+\.google\.[a-z,\.]+/.+$/
// @grant none
// @run-at document_end
// @date 05/29/2020
// @modified 05/29/2020
// @version 1.0.2
// @namespace http://xander/wang
// ==/UserScript==
{
const sites = [
{
name: '百度',
host: 'baidu.com',
link: 'https://www.baidu.com/s',
key: 'wd',
hide: false
},
{
name: '必应',
host: 'bing.com',
link: 'https://bing.com/search',
key: 'q',
hide: false
},
{
name: '谷歌',
host: 'google.com',
link: 'https://www.google.com/search',
key: 'q',
hide: false
},
{
name: '谷歌镜像',
host: 'google.fuckcloudnative.io',
link: 'https://google.fuckcloudnative.io/search',
key: 'q',
hide: true
},
{
name: '搜搜',
host: 'so.com',
link: 'https://www.so.com/s',
key: 'q',
hide: false
},
{
name: '搜狗',
host: 'sogou.com',
link: 'https://www.sogou.com/web',
key: 'query',
hide: false
}
];
const css = `
.search-warpper {
position: fixed;
left: 0;
top: 0;
}
.search-switcher {
position: fixed;
opacity: 0.2;
top: 80px;
right: calc(100% - 10px);
z-index: 9999999;
transition: all 400ms;
}
.search-switcher:hover {
top: 80px;
left: 0px;
right:auto;
opacity: 1;
border-radius: 0 20px;
}
.search-switcher .search-list {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-sizing:border-box;
background-color: #000;
border-radius: 0px 10px 10px 0px;
color: #fff;
padding: 10px;
box-shadow: 5px 5px 5px #777;
}
.search-switcher .search-list a {
color: #0cf;
height: 25px;
line-height: 25px;
}
.search-switcher .search-list a.mirror {
font-weight: bold;
}
`;
function setup() {
console.log('location:', location);
let site;
let isMirror;
for (let s of sites) {
if (location.host.includes(s.host)) {
site = s;
}
}
let siteList = sites.filter(({ host , hide}) => !location.hostname.includes(host) && !hide );
console.log('siteList:', siteList);
let query = new URLSearchParams(location.search).get(site.key || 'q');
console.log('site:', site, ',query:', query);
if( query == null ) {
return
}
const body = document.getElementsByTagName('body')[0];
// 样式
const style = document.createElement('style');
style.innerHTML = css;
body.appendChild(style);
// 生成切换框
const content = document.createElement('div');
const aTag = ({ link, name, host, mirror, key }) => {
let className = '';
let text = name;
let href = `${link}?${key}=${query}`;
console.log('href:', href);
return `<a href='${href}' target='_blank' >${text}</a>`;
};
const tags = siteList
.filter(({ hidden }) => !hidden)
.map(aTag)
.join('');
content.innerHTML = `
<div id='search-switcher' class='search-switcher'>
<div id='search-list' class="search-list">${tags}</div>
</div>`;
body.appendChild(content);
const searchDiv = document.getElementById('search-switcher')[0];
console.log('searchDiv:', searchDiv.clientHeight);
console.log('body:', body.clientHeight);
}
let href0 = '';
!(function init() {
var href = location.href;
if (href0 != href) {
var oldDOM = document.getElementById('search-switcher');
if (oldDOM) {
oldDOM.parentNode.removeChild(oldDOM);
}
setup();
href0 = href;
}
setTimeout(init, 2222);
})();
}
//end userScript