- // ==UserScript==
- // @name Site 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 l1xnan
- // @namespace http://hzy.pw
- // @homepageURL http://hzy.pw/p/1849
- // @supportURL https://github.com/h2y/link-fix
- // @icon http://q.qlogo.cn/qqapp/100229475/F1260A6CECA521F6BE517A08C4294D8A/100
- // @license GPL-3.0
- // @include https://github.com/*
- // @include https://github.com.cnpmjs.org/*
- // @include *.baidu.com/*
- // @exclude *.baidu.com/link?*
- // @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 02/16/2020
- // @modified 02/16/2020
- // @version 1.0.0
- // ==/UserScript==
-
- {
- const sites = [
- {
- name: '百度',
- host: 'baidu.com',
- link: 'https://www.baidu.com/s',
- key: 'wd',
- },
- {
- name: '必应',
- host: 'bing.com',
- link: 'https://bing.com/search',
- key: 'q',
- },
- {
- name: '谷歌',
- host: 'www.google.com',
- link: 'https://www.google.com/search',
- key: 'q',
- mirror: 'google.fuckcloudnative.io',
- },
- {
- name: 'Github',
- host: 'github.com',
- link: 'https://github.com/search',
- key: 'q',
- mirror: 'github.com.cnpmjs.org',
- },
- // {
- // name: '搜搜',
- // host: 'so.com',
- // link: 'https://www.so.com/s?q=',
- // key: 'q',
- // hidden: true,
- // },
- // {
- // name: '搜狗',
- // host: 'sogou.com',
- // link: 'https://www.sogou.com/web?query=',
- // key: 'query',
- // hidden: true,
- // },
- ];
-
- // 镜像站
- const mirrors = {
- 'github.com': 'https://github.com.cnpmjs.org/search?q=',
- 'google.com': 'https://google.fuckcloudnative.io/search?q=',
- };
- const css = `
- .search-switcher {
- position: fixed;
- box-sizing:border-box;
- background-color: #000;
- opacity: 0.3;
- border-radius: 40px;
- color: #fff;
- padding: 15px 20px;
- bottom: 100px;
- left: -280px;
- width: 300px;
- z-index: 9999999;
- transition: all 400ms;
- }
- .search-switcher:hover {
- left: 5px;
- opacity: 1;
- border-radius: 10px;
- box-shadow: 5px -5px 10px #777;
- }
- .search-switcher p {
- margin: 0;
- }
- p.search-switcher-title {
- font-weight: bold;
- margin-bottom: 5px;
- }
- .search-switcher a {
- color: #0cf;
- margin-right: 20px;
- }
- .search-switcher a.mirror {
- font-weight: bold;
- }
- `;
-
- function setup() {
- let site;
- let isMirror;
- for (let s of sites) {
- if (location.host.includes(s.host)) {
- site = s;
- }
- if (location.href.includes(s.mirror)) {
- site = s;
- isMirror = true;
- }
- }
- sites.filter(({ host }) => location.hostname.includes(host))[0];
- let mirror = sites.filter(({ mirror }) =>
- location.hostname.includes(mirror),
- )[0];
-
- let query = new URLSearchParams(location.search).get(site.key || 'q');
- console.log(site, query, isMirror);
- 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}`;
- if (mirror && name === site.name) {
- href = location.href.replace(host, mirror);
- text = '镜像';
- className = 'mirror';
- if (isMirror) {
- text = '原站';
- href = location.href.replace(mirror, host);
- }
- }
- return `<a href='${href}' target='_blank' class=${className}>${text}</a>`;
- };
- const tags = sites
- .filter(({ hidden }) => !hidden)
- .map(aTag)
- .join('');
-
- content.innerHTML = `
- <div id='search-switcher' class='search-switcher'>
- <p class='search-switcher-title'>一键切换引擎:</p>
- <p>${tags}</p>
- </div>`;
- body.appendChild(content);
- }
-
- 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