聚合搜索

整合百度、Google、微信、Bing、知乎、知网空间搜索,提高搜索效率。在原作者基础上自行修改了部分内容,原作者链接:https://greasyfork.org/zh-CN/scripts/436613-聚合搜索。原原作者链接:https://greasyfork.org/zh-CN/scripts/401457-聚合搜索

// ==UserScript==
// @name         聚合搜索
// @namespace    http://tampermonkey.net/
// @version      0.1.1
// @description  整合百度、Google、微信、Bing、知乎、知网空间搜索,提高搜索效率。在原作者基础上自行修改了部分内容,原作者链接:https://greasyfork.org/zh-CN/scripts/436613-聚合搜索。原原作者链接:https://greasyfork.org/zh-CN/scripts/401457-聚合搜索
// @author       Peng Shiyu, 海洋空氣
// @website      https://www.pengshiyu.com/

// @match        *://www.baidu.com/s*
// @match        *://www.google.com/search*
// @match        *://weixin.sogou.com/weixin*
// @match        *://www.bing.com/search*
// @match        *://www.zhihu.com/search*
// @match        *://search.cnki.com.cn/Search/Result*

// @grant        unsafeWindow
// @grant        window.onload
// @run-at       document-end

// @license     MIT
// ==/UserScript==

// @require      file:///Users/hina/workspace/www.farthe.com/code/chrome/search/index.js


// 搜索网址配置
const urlMapping = [{
        name: '百度',
        searchUrl: 'https://www.baidu.com/s?wd=',
        keyName: 'wd',
        testUrl: /https:\/\/www.baidu.com\/s.*/,
    },
    {
        name: 'Google',
        searchUrl: 'https://www.google.com/search?q=',
        keyName: 'q',
        testUrl: /https:\/\/www.google.com\/search.*/,
    },
    {
        name: '微信文章',
        searchUrl: 'https://weixin.sogou.com/weixin?type=2&s_from=input&query=',
        keyName: 'query',
        testUrl: /https:\/\/www.baidu.com\/s.*/,
    },
    {
        name: 'Bing',
        searchUrl: 'https://www.bing.com/search?ensearch=0&q=',
        keyName: 'q',
        testUrl: /https:\/\/www.bing.com\/search.*/,
    },
    {
        name: '知乎',
        searchUrl: 'https://www.zhihu.com/search?type=content&q=',
        keyName: 'q',
        testUrl: /https:\/\/www.google.com.hk\/search.*/,
    },    
    {
        name: '知网空间',
        searchUrl: 'https://search.cnki.com.cn/Search/Result?content=',
        keyName: 'q',
        testUrl: /https:\/\/fsou.cc\/search.*/,
    }       
                    
];

// JS获取url参数
function getQueryVariable(variable) {
    let query = window.location.search.substring(1);
    let pairs = query.split("&");
    for (let pair of pairs) {
        let [key, value] = pair.split("=");
        if (key == variable) {
            return decodeURIComponent(value);
        }
    }
    return null;
};

// 从url中获取搜索关键词
function getKeywords() {
    let keywords = '';

    for (let item of urlMapping) {
        if (item.testUrl.test(window.location.href)) {
            keywords = getQueryVariable(item.keyName);
            break
        }
    }

    console.log(keywords);
    return keywords;
};

// 添加节点
function addBox() {
    // 主元素
    var div = document.createElement('div')
    div.id = 'search-app-box'
    div.style = "position: fixed; top: 160px; left: 20px; width: 100px; background-color: #EEEEEE; font-size: 12px;z-index: 99999;"
    // document.body.appendChild(div)
    document.body.insertAdjacentElement("afterBegin", div);

    // 标题
    let title = document.createElement('span')
    title.innerText = "聚合搜索"
    title.style = "display: block; text-align: center; margin-top: 10px; font-size: 14px; font-weight: bold;"
    div.appendChild(title)

    // 搜索列表
    for (let index in urlMapping) {

        let item = urlMapping[index];

        // 样式
        let style = "display: block; padding: 10px 0 10px 20px; text-decoration: none;";
        let defaultStyle = style + "color: #333333 !important;";
        let hoverStyle = style + "color: #ffffff !important; background-color: #666666;";

        let a = document.createElement('a')
        a.innerText = item.name
        a.style = defaultStyle
        a.id = index
        a.href = item.searchUrl + getKeywords()

        // 鼠标移入移除效果,相当于hover
        a.onmouseenter = function () {
            this.style = hoverStyle
        }
        a.onmouseleave = function () {
            this.style = defaultStyle
        }

        div.appendChild(a)
    }
};

(function () {
    'use strict';
    window.onload = addBox;
})();