Greasy Fork

Greasy Fork is available in English.

轻量级聚合搜索,支持百度,谷歌,必应,360搜索,搜狗,淘宝,京东,知乎,B站,豆瓣,优酷,爱奇艺,GitHub等

轻量级聚合搜索,支持百度,谷歌,必应,360搜索,搜狗,淘宝,京东,知乎,B站,豆瓣,优酷,爱奇艺,GitHub,云盘精灵,大圣盘,大力盘,小昭来啦,小可搜搜,支持谷歌搜索链接新窗口打开,可以在下面的自定义处自定义自己的内容,也在代码开关中开启或关闭百度聚合功能及谷歌搜索链接新窗口打开功能。

当前为 2020-09-23 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         轻量级聚合搜索,支持百度,谷歌,必应,360搜索,搜狗,淘宝,京东,知乎,B站,豆瓣,优酷,爱奇艺,GitHub等
// @namespace    http://bbs.91wc.net/aggregate-search.htm
// @version      1.3.1
// @description  轻量级聚合搜索,支持百度,谷歌,必应,360搜索,搜狗,淘宝,京东,知乎,B站,豆瓣,优酷,爱奇艺,GitHub,云盘精灵,大圣盘,大力盘,小昭来啦,小可搜搜,支持谷歌搜索链接新窗口打开,可以在下面的自定义处自定义自己的内容,也在代码开关中开启或关闭百度聚合功能及谷歌搜索链接新窗口打开功能。
// @author       Wilson
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEZ0lEQVRYR8WWX2hbVRzHv7+TOhxsZfembIyJdrYncVWk2K5T+2JBO9Tpi7QPOqHzoX9u2sIGivig26MKU1xyb7upHSIIDkQdOlB0fahM2TJ0uLXNTedgRZgmN+0qzLbJ/clNk5ql+XMTqJ6nkPM7v+/nfs/v/M4h/M+DKtVX3zNrxQbhSy7bm7Jr54bkeKV5svGuAJSRmaeIuQvMewDsKiC2wOCTgDiT0BrPVAJTEkAJRvaRwOsA7QZjFoRzTLjo/OYUZj2C6xlcDxIPA3gEQC0YHwryvBXT7p12A1IUwKubAQaCaWGBo9aAfKdUQvWEeReWcAiEgwBiDNGT0Bq+KgdREMAbivQw0RiAyxDotvrllXKJsvOqbnYB+BRAAgJPW/3yXKm1awA2Bye9d4iaGAPjCU12uBXOj1N1k0GYgk2dVqDxerE8awBUIzoG5mZ7saZj7uDOuWoBthwzHxMenGVCMDEgh1wBKCFTI0KIQX0JrfH4qq0jkSesft+3lcKoemQUoF7Y3GkNFl5/mwOqEb3EzEsJTbZmxRR9pp9gH7KZu+cCvp8rgajToy02+AKAMUuTLxVauwpQN3ptu51a/p0ZwURgxTI1FH0UxD8AOGVpsrsS8Zyi/JoBmdCkLAmgGDP7iO3TxPxcPOD7zAn26hGDQftTSTTPD8uZagAUw3yBGB+nYDfMa/6r+TlWHVBD04dB4g1K2bviQ/6ptAO66Xw9LE22VyOe/ohj0/exR0zaKXQUatmrAF7d/JKBZ2o31my8dmDn3xmABQDvW5p0mktVo37stztv3kreKgughMwQEbSlJLb+NSz/zABMgzlsBXzPV6UOYJsR3brMfKMsgNcwX2TGRykbLfOD8uIKQOQTgB6yNOmvFqBuZKbVtu3zxNwUD/gmi9aAol99kJD6hZgPxAO+kyunIFMXOf9VCqIY5qsEHLHE/Cb0tS4XBXAmlJD5hwC+iQfk/pxj9CNA24ipOx5oOF8pgGqYlxhYTgzIlpLHMA2gm18Q8KwAtca0xnDahRGziVJ4LRfKLYSiR3sJPAq2j1gB/+HyAEa0nZgnAD5uab4+t0LF4hTdvEDAdkuTO4rFrLmMvEb0TWZ+pRS1GzBVN50ruSv/XilZA//ue2QKIH+xo1MOIFu8K3FsWZrP69qBnOKbANDuOIGUOGoNy5tlhUfMJjC9DOaevNjLliYfKFsD+QHZ3pB+GTGNEdsT8UHfT/lxih59kji1ByScjllbEJToO2ug8XFXW5AblOkPbwPoTBsKLAKYBXCdQPVwHqWZQcBpBvYC2FDErTW3qqtnuZPMa0y3gcVuG2gj5jYQ7WAgTIwwQ4Q9jHBssCGCs1yjTpo3AFLdQLgGKLf/ufN1H0xtthc9vwK4u8i6bkuTp5y5dQFwEmcuoe8B3F8AYnUr1g3AEd0SvHKPEDWfA9R8GwTbvVbAf2JdHcgKZh4k72KlOJ0iHk967K6FPn/sPwFY7SuGuddOYjH/VbSuW+CmcP8Bvs7fMICKGssAAAAASUVORK5CYII=
// @require      https://cdn.jsdelivr.net/npm/[email protected]/jquery.min.js
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        unsafeWindow
// @license      GPL License
// ==/UserScript==

//避免jQuery冲突
this.$ = this.jQuery = jQuery.noConflict(true);

(function() {
    'use strict';

    /////////////// 变量配置 ///////////////////////////

    //是否开启谷歌搜索链接新窗口打开
    var is_google_blank = 1;

    //是否开启百度聚合搜索
    var is_open_multi_search=1;

    ///////////////////// 这里可以自定义自己的网站 /////////////////////
    //默认的搜索引擎,格式:[名称][搜索网址][是否新窗口打开,可省略] 搜索关键词用 #keyword# 表示,每行一个网站
    var defaultLinkList = `
[谷歌搜索][https://www.google.com/search?q=#keyword#]
[百度搜索][https://www.baidu.com/s?wd=#keyword#]
[Bing搜索][https://cn.bing.com/search?q=#keyword#]
[360搜索][https://www.so.com/s?q=#keyword#]
[搜狗搜索][https://www.sogou.com/web?query=#keyword#]]
[GitHub][https://github.com/search?utf8=✓&q=#keyword#]
[Stackoverflow][https://stackoverflow.com/search?q=#keyword#][新窗口]
[Segmentfault][https://segmentfault.com/search?q=#keyword#]
[知乎搜索][https://www.zhihu.com/search?type=content&q=#keyword#]
[百度翻译][https://fanyi.baidu.com/#en/zh/#keyword#]
[搜狗翻译][https://fanyi.sogou.com/?keyword=#keyword#]
[谷歌翻译][https://translate.google.com/?hl=zh-CN&tab=wT0#view=home&op=translate&sl=auto&tl=zh-CN&text=#keyword#][新窗口]
[YouTube][https://www.youtube.com/results?search_query=#keyword#]
[Quora][https://www.quora.com/search?q=#keyword#][新窗口]
[淘宝搜索][https://s.taobao.com/search?q=#keyword#][新窗口]
[京东搜索][http://search.jd.com/Search?keyword=#keyword#][新窗口]
[Bilibili][http://search.bilibili.com/all?keyword=#keyword#][新窗口]
[豆瓣搜索][https://www.douban.com/search?source=suggest&q=#keyword#]
[优酷搜索][https://so.youku.com/search_video/q_#keyword#][新窗口]
[爱奇艺搜索][https://so.iqiyi.com/so/q_%E5%A5%BD%E5%A5%BD#keyword#][新窗口]
[云盘精灵搜][https://www.yunpanjingling.com/search/#keyword#]
[大圣盘搜索][https://www.dashengpan.com/search?keyword=#keyword#]
[大力盘搜索][https://www.dalipan.com/search?keyword=#keyword#]
[小昭来啦][https://www.xiaozhaolaila.com/s/search?q=#keyword#]
[小可搜搜][https://www.xiaokesoso.com/s/search?q=#keyword#]
`;
    defaultLinkList = defaultLinkList.replace(/^\n/, '').replace(/\n$/, '');

    var main=function(){
        //谷歌搜索链接新窗口打开
        if(document.domain.indexOf("google.com")!==-1 && is_google_blank){
            $("#search div.r a").attr("target", "_blank");
        }

        /////////////// 聚合搜索开始 //////////////////////////////////////////////

        if(!is_open_multi_search){
            return;
        }
        var getY2BVal = function(name){
            var ytbobj=document.getElementsByName("search_query");
            if(ytbobj && ytbobj[0] && ytbobj[0].value){
                return ytbobj[0].value;
            };
            return '';
        };
        var getkw = function(){
            var kw=$("#kw").val()||$("input[name=q]").val()||$("#upquery").val()||$("#baidu_translate_input").val()||
                $("#trans-input").val()||$("#Popover2-toggle").val()||$("input.word").val()||$("input[name=q]").eq(1).val() ||
                $("input[name=keyword]").val()||$("input[name=searchInput]").val()||getY2BVal()||
                $(".right_contents input.selector_input").val()||"";
            return encodeURIComponent(kw.replace(/^\s+|\s+$/gm,''));
        };
        //数据转html
        var data2html = function(data){
            var tpl = `<!--{{sitename}}-->
<div class="wish_s_item"><a href="{{siteurl}}" {{sitetarget}}>{{sitename}}</a></div>
`;
            var linkList = data || (GM_getValue("wish_s_searchlinklist") || defaultLinkList);
            var linkArr = linkList.split(/\r*?\n|\r/);
            var linkhtmls = "";
            for(var i in linkArr){
                var link=$.trim(linkArr[i]);
                if(link!==""){
                    link = link.replace(/【/g, '[').replace(/】/g, ']');
                    var matches = link.match(/\[(.*?)\][^\[]*?\[(.*?)\](?:[^\[]*?\[(.*?)\])?/);
                    if (matches != null) {
                        var title = $.trim(matches[1]);
                        var target = (matches[3] && (matches[3] == "新窗口" || matches[3] == "新窗口打开"|| matches[3] == "_blank"|| matches[3] == "newwin")) ? 'target="_blank"' : "";
                        var url = matches[2].indexOf("#keyword#")!==-1 ? $.trim(matches[2]) : $.trim(matches[2]) + "#keyword#";
                        var linkhtm = tpl.replace(/\{\{sitename\}\}/g, title).replace("{{siteurl}}", url).replace("{{sitetarget}}", target);
                        linkhtmls += linkhtm;
                    }
                }
            }
            return linkhtmls;
        }
        var bindSearch=function(force){
            force = force||0;
            if(!force && $("#wish_search_wrapper").length > 0){
                return;
            }

            var linkList = GM_getValue("wish_s_searchlinklist") || defaultLinkList;
            var searchLinkList = data2html(linkList);

            //搜索列表HTML,可在这里调整显示顺序和列表显示效果
            var html=`<style>
#wish_search_list a{display:inline-block;padding:0 4px;font-size: 15px;width: 100%;}
#wish_search_list a:hover,.wish_s_item:hover{background:#37a;color:#fff;}
.wish_s_item{padding:4px 1px;}
#wish_search_settingbtn{margin-left:15px}
</style>
<div id="wish_search_wrapper" style="position:fixed;top:60px;left:20px;background:#fff;z-index:8888">
<div>
<a href="javascript:;" id="wish_search_openclose">关闭</a>
<a href="javascript:;" id="wish_search_settingbtn">设置</a>
</div>
<div id="wish_search_content">
<div id="wish_search_list" style="overflow:hidden;width:101px;">

`+searchLinkList+`

</div>
<div id="wish_search_more_wrapper" style="text-align:center;border-top:1px solid #ccc;">
<a id="wish_search_more_btn" href="javascript:;" style="display:inline-block;width:80px;height:50px;line-height:40px;font-size:16px;">更多</a>
</div>
<div>
<style>
#wish_search_setting_wrapper{display:none;background:#fff;position:fixed;top:68px;left:126px;border:2px solid #C5C7CF;padding:10px;border-radius: 8px;}
#wish_search_setting_title{display:inline-block;}
#wish_search_setting_close{float: right;display:inline-block}
#wish_search_setting_top{margin-bottom:8px;}
#wish_search_setting_bottom{margin-top:1.5px;}
#wish_search_setting_close a,#wish_search_setting_close a:visited{color: #2440b3;}
#wish_search_setting_save{
    color: #fff;
    background-color: #007bff;
    border-color: #007bff;
    border: 1px solid transparent;
    display: inline-block;
    text-align: center;
    vertical-align: middle;
    border-radius: 5px;
    font-size:16px;
    padding:6px 14px;
    cursor:pointer;
}
#wish_search_setting_tips{
    display:none;position:absolute;z-index:9999;width:300px;height:40px;top:220px;left:250px;
    background-color:#d4edda;border-color:#c3e6cb;color:#155724;padding: 0.75rem 1.25rem;
    padding:0 8px;line-height:40px;height:40px;font-size:16px;text-align:center;border-radius: 0.25rem;border: 1px solid transparent;
}
#wish_search_setting_reset{margin-top:4px;color:#999;cursor:pointer;float:right;}
</style>
<div id="wish_search_setting_wrapper">
<div id="wish_search_setting_top">
<span id="wish_search_setting_title"><b>聚合搜索设置</b>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:red;">格式:[名称][搜索网址][是否新窗口打开,可省略]&nbsp;&nbsp;&nbsp;&nbsp;搜索关键词用 #keyword# 表示,每行一个网站</span></span>
<span id="wish_search_setting_close"><a id="wish_search_setting_close_a" href="javascript:;">关闭</a></span>
</div>
<div id="wish_search_setting_content">
<div id="wish_search_setting_tips"></div>
<textarea id="wish_search_setting_searchlist" style="width:800px;height:480px;border:2px solid #C5C7CF;">`+linkList+`</textarea>
</div>
<div id="wish_search_setting_bottom">
<button type="button" id="wish_search_setting_save">保存</button>
<span id="wish_search_setting_reset">恢复出厂设置</span>
</div>
</div>
</div>`;
            //追加搜索列表
            //var kw=getkw();
            //html = html.replace(/#keyword#/gm, kw);
            if($("#wish_search_wrapper").length > 0){
                $("#wish_search_wrapper").remove();
            }
            $("body").append(html);
            if(document.domain=='www.youtube.com'||document.domain=='www.quora.com'){
                $("#wish_search_wrapper").css({left:"auto", right:"20px"});
            }
            if(document.domain=='www.so.com'||document.domain=='www.bing.com'){
                $("#wish_search_wrapper").css({left:"15px"});
            }

            //设置列表高度
            var wish_search_list = $('#wish_search_list');
            var listH=wish_search_list.outerHeight(true);
            var winH=$(window).height()-70;
            if(listH > winH){
                winH -= 50;
                $("#wish_search_more_wrapper").show();
                $("#wish_search_more_btn").click(function(){
                    $("#wish_search_more_wrapper").hide();
                    winH += 44;
                    wish_search_list.height(winH);
                    $("#wish_search_list").css("overflow-y", "auto");
                });
            }
            wish_search_list.height(winH);

            //列表关闭
            var wish_s_open_key="__wish_s_open";
            $("#wish_search_openclose").click(function(){
                if(GM_getValue(wish_s_open_key, 1)){
                    //关闭
                    $("#wish_search_content").hide();
                    $(this).html("开启聚合搜索");
                    $("#wish_search_settingbtn").hide();
                    GM_setValue(wish_s_open_key, 0);
                } else {
                    //开启
                    $("#wish_search_content").show();
                    $(this).html("关闭");
                    $("#wish_search_settingbtn").show();
                    GM_setValue(wish_s_open_key, 1);
                }
            });
            if(GM_getValue(wish_s_open_key, 1)){
                //开启
                $("#wish_search_content").show();
                $("#wish_search_openclose").html("关闭");
                $("#wish_search_settingbtn").show();
            } else {
                //关闭
                $("#wish_search_content").hide();
                $("#wish_search_openclose").html("开启聚合搜索");
                $("#wish_search_settingbtn").hide();
            }

            //初始化搜索引擎链接
            var initLink = function(){
                //初始化data-href链接
                $("#wish_search_list a").each(function(){
                    var me=$(this);
                    me.attr("data-href", me.attr("href"));
                });

                //链接跳转
                $("#wish_search_list a").on('click', function(){
                    var me=$(this);
                    if(me.attr("href").indexOf('#keyword#')!==-1){
                        var href=me.attr("href").replace(/#keyword#/i, getkw());
                        me.attr("href", href);
                    }
                    return true;
                });

                //动态修改链接
                $("#wish_search_list a").on('mouseover', function(){
                    var me=$(this);
                    var href=me.attr("data-href").replace(/#keyword#/i, getkw());
                    me.attr("href", href);
                });
            }
            initLink();

            //校验设置数据
            var checkData = function(data){
                data = data || $("#wish_search_setting_searchlist").val();
                data = $.trim(data);
                if(data == ""){
                    alert("数据不能为空");
                    return false;
                }
                var linkArr = data.split(/\r*?\n|\r/);
                for(var i in linkArr){
                    var link=$.trim(linkArr[i]);
                    if(link!==""){
                        if(link.toLowerCase().indexOf("#keyword#")===-1){
                            alert("以下数据缺少#keyword#,请检查后重试!\n" + link);
                            return false;
                        }
                        if(link.toLowerCase().indexOf("【")!==-1||link.toLowerCase().indexOf("】")!==-1){
                            alert("以下数据含有非法字符【】请,请检查后重试!\n" + link);
                            return false;
                        }
                        var matches = link.match(/\[(.*?)\][^\[]*?\[(.*?)\](?:[^\[]*?\[(.*?)\])?/);
                        if(matches == null){
                            alert("以下数据格式有误,请检查后重试!\n" + link);
                            return false;
                        }
                        if(!matches[1] || !matches[2]){
                            alert("以下数据没有匹配到标题或链接,可能格式有误,请检查后重试!\n" + link);
                            return false;
                        }
                    }
                }
                return true;
            }

            //设置保存
            $("#wish_search_setting_save").click(function(){
                var data = $("#wish_search_setting_searchlist").val();
                if(!checkData(data)){
                    return false;
                }
                var me = $(this);
                me.attr("disabled", true).html("保存中...");
                //保存数据
                GM_setValue("wish_s_searchlinklist", data);
                //重新加载列表
                $("#wish_search_list").html(data2html());
                //初始化搜索引擎链接
                initLink();
                $("#wish_search_setting_tips").html("恭喜,保存成功啦~~").show();
                me.html("保存成功");
                setTimeout(function(){
                    me.attr("disabled", false).html("保存");
                    $("#wish_search_setting_tips").hide();
                    $("#wish_search_setting_wrapper").hide();
                }, 1000);
            });
            //设置按钮被点击
            $("#wish_search_settingbtn").click(function(){
                $("#wish_search_setting_wrapper").toggle();
                $("#wish_search_setting_searchlist").focus();
            });
            //设置关闭
            $("#wish_search_setting_close_a,#wish_search_openclose").click(function(){
                $("#wish_search_setting_wrapper").hide();
            });
            //设置恢复出厂设置
            $("#wish_search_setting_reset").click(function(){
                if(confirm("您确定要恢复到出厂设置吗?将会清除现有设置且不可恢复!")){
                    $("#wish_search_setting_searchlist").val(defaultLinkList);
                    var me=$(this);
                    me.html("<font color='red'>已恢复到出厂设置,保存后方能生效哦~</font>");
                    setTimeout(function(){me.html("恢复出厂设置");}, 3000);
                }
            });
        };

        //////// main ////////////
        //百度翻译
        if(document.domain.indexOf("fanyi.baidu.com")!==-1){
            bindSearch();
        }
        //百度搜索
        else if(document.domain.indexOf("baidu.com")!==-1){
            //监控百度首页变化
            $('#wrapper_wrapper').on("DOMNodeInserted", function(){
                bindSearch();
            });

            //匹配百度搜索页
            if(location.href.indexOf("wd=")!==-1){
                bindSearch();
            }
        }
        //其他
        else {
            bindSearch();
        }
        /////////////// 聚合搜索结束 //////////////////////////////////////////////
    };

    //获取domain数组
    var isDomainAllow = function(){
        var data = GM_getValue("wish_s_searchlinklist") || defaultLinkList;
        data = $.trim(data);
        if(data == ""){
            return false;
        }
        if($.inArray(document.domain, ["cn.bing.com","www.bing.com","www.google.com","www.google.com.hk","cn.google.com"]) !==-1){
            return true;
        }
        var linkArr = data.split(/\r*?\n|\r/);
        for(var i in linkArr){
            var link=$.trim(linkArr[i]);
            if(link!==""){
                var isBlank = link.indexOf("新窗口") !== -1 || link.indexOf("新窗口打开") !== -1 || link.indexOf("_blank") !== -1 || link.indexOf("newwin") !== -1;
                if(link.indexOf(document.domain) !== -1 && !isBlank){
                    return true;
                }
            }
        }
        return false;
    }

    //开始执行
    if(isDomainAllow()){
        main();
    }

})();