// ==UserScript== // @name 轻量级聚合搜索,支持百度,谷歌,必应,360搜索,搜狗,淘宝,京东,知乎,B站,豆瓣,优酷,爱奇艺,GitHub等 // @namespace http://bbs.91wc.net/aggregate-search.htm // @version 1.3.5 // @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/jquery@1.9.1/jquery.min.js // @match *://www.baidu.com/* // @match *://www.google.com/search* // @match *://www.google.com.hk/search* // @match *://cn.bing.com/search* // @match *://www.so.com/s* // @match *://www.sogou.com/web* // @match *://fanyi.sogou.com/* // @match *://fanyi.baidu.com/* // @match *://github.com/search* // @match *://www.zhihu.com/search* // @match *://www.douban.com/search* // @match *://www.yunpanjingling.com/search/* // @match *://www.dashengpan.com/search* // @match *://www.dalipan.com/search* // @match *://www.xiaozhaolaila.com/s/search* // @match *://www.xiaokesoso.com/s/search* // @match *://www.youtube.com/results* // @match *://segmentfault.com/search* // @match *://v.qq.com/x/search/* // @match *://list.tmall.com/search_product* // @match *://dict.youdao.com/* // @match *://zzk.cnblogs.com/* // @match *://so.csdn.net/* // @match *://juejin.im/search* // @match *://search.yahoo.com/search* // @match *://zh.wikipedia.org/* // @match *://yandex.com/search/* // @match *://*/* // @grant GM_setValue // @grant GM_getValue // @license GPL License // @downloadURL none // ==/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#]] [雅虎] [https://search.yahoo.com/search?p=#keyword#] (input[name=p]) [Yandex] [https://yandex.com/search/?text=#keyword#] (input[name=text]) [维基百科] [https://zh.wikipedia.org/wiki/#keyword#] [新窗口] [GitHub] [https://github.com/search?utf8=✓&q=#keyword#] [Stackoverflow] [https://stackoverflow.com/search?q=#keyword#] [新窗口] [Segmentfault] [https://segmentfault.com/search?q=#keyword#] [Quora] [https://www.quora.com/search?q=#keyword#] [新窗口] [知乎搜索] [https://www.zhihu.com/search?type=content&q=#keyword#] [豆瓣搜索] [https://www.douban.com/search?source=suggest&q=#keyword#] [博客园] [https://zzk.cnblogs.com/s?w=#keyword#] (input[name=Keywords]) [右侧] [CSDN] [https://so.csdn.net/so/search/s.do?q=#keyword#] (#toolbar-search-input) [简书] [https://www.jianshu.com/search?q=#keyword#] (#q) [掘金] [https://juejin.im/search?query=#keyword#] (.search-input) [MSDN] [https://docs.microsoft.com/zh-cn/search/?terms=#keyword#] [新窗口] [百度图片] [https://image.baidu.com/search/index?tn=baiduimage&word=#keyword#] [新窗口] [Google图片] [https://www.google.com/search?q=#keyword#&tbm=isch] [新窗口] [Bing图片] [https://cn.bing.com/images/search?q=#keyword#&scenario=ImageBasicHover] [新窗口] [百度翻译] [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#] [新窗口] [有道词典] [https://dict.youdao.com/w/#keyword#] [新窗口] [必应词典] [https://cn.bing.com/dict/search?q=#keyword#] [新窗口] [Vocabulary] [https://www.vocabulary.com/dictionary/#keyword#] [新窗口] [格林斯高阶] [https://www.collinsdictionary.com/dictionary/english/#keyword#] [新窗口] [剑桥词典] [https://dictionary.cambridge.org/zhs/%E8%AF%8D%E5%85%B8/%E8%8B%B1%E8%AF%AD-%E6%B1%89%E8%AF%AD-%E7%AE%80%E4%BD%93/#keyword#] [新窗口] [韦氏词典] [https://www.learnersdictionary.com/definition/#keyword#] [新窗口] [淘宝搜索] [https://s.taobao.com/search?q=#keyword#] [新窗口] [天猫搜索] [https://list.tmall.com/search_product.htm?q=#keyword#] [新窗口] [京东搜索] [http://search.jd.com/Search?keyword=#keyword#] [新窗口] [YouTube] [https://www.youtube.com/results?search_query=#keyword#] [新窗口] [Bilibili] [http://search.bilibili.com/all?keyword=#keyword#] [新窗口] [优酷搜索] [https://so.youku.com/search_video/q_#keyword#] [新窗口] [爱奇艺搜索] [https://so.iqiyi.com/so/q_#keyword#] [新窗口] [腾讯视频] [https://v.qq.com/x/search/?q=#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 isBlank, hasCommandIsBlank = function(){ if(typeof isBlank !== 'undefined') return isBlank; var data = GM_getValue("wish_s_searchlinklist") || defaultLinkList; data = $.trim(data); if(data == ""){ isBlank=false; return false; } var linkArr = data.split(/\r*?\n|\r/); for(var i in linkArr){ var link=$.trim(linkArr[i]); if(link!==""){ if($.inArray(document.domain, ["cn.bing.com","www.bing.com"]) !==-1 && (link.indexOf("cn.bing.com")!==-1||link.indexOf("www.bing.com")!==-1)) { if(location.href.indexOf("images/search")!==-1 && link.indexOf("images/search")!==-1){ continue; } } if($.inArray(document.domain, ["www.google.com","www.google.com.hk"]) !==-1 && (link.indexOf("www.google.com")!==-1||link.indexOf("www.google.com.hk")!==-1)) { if(location.href.indexOf("tbm=")!==-1 && link.indexOf("tbm=")!==-1){ continue; } } if(link.toLowerCase().indexOf(document.domain.toLowerCase()) !== -1){ if (/\[\s*?新窗口(打开)?\s*?\]/.test(link)) { isBlank=true; return true; }; } } } isBlank=false; return false; } 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 getQueryVariable = function (variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i
{{sitename}}
`; 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 url = matches[2].indexOf("#keyword#")!==-1 ? $.trim(matches[2]) : $.trim(matches[2]) + "#keyword#"; var target = /\[\s*?新窗口(打开)?\s*?\]/.test(link) ? 'target="_blank"' : ""; var inputselector=link.match(/\(\s*?(.*?)\s*?\)/); inputselector = inputselector && inputselector[1] ? inputselector[1] : ""; var linkhtm = tpl.replace(/\{\{sitename\}\}/g, title).replace("{{siteurl}}", url).replace("{{sitetarget}}", target).replace("{{inputselector}}", inputselector); linkhtmls += linkhtm; } } } return linkhtmls; } //搜索触发事件 var bindSearch=function(force){ force = force||0; if(!force && $("#wish_search_wrapper").length > 0){ return; } var areaLinkList = GM_getValue("wish_s_searchlinklist") || defaultLinkList; var searchLinkList = data2html(areaLinkList); //搜索列表HTML,可在这里调整显示顺序和列表显示效果 var html=`
`+searchLinkList+`
聚合搜索设置    格式:[名称][搜索网址][是否新窗口打开]?(关键词选择符)?    搜索关键词用 #keyword# 表示,每行一个网站 关闭
  也可以在配置里添加 [右侧] 命令,该命令可使该网址下的列表显示在右侧 更多>> 恢复出厂设置
`; //追加搜索列表 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"}); //$("#wish_search_setting_wrapper").css({left:"auto", right:"126px"}); //} if(document.domain=='www.so.com'||document.domain=='www.bing.com'){ $("#wish_search_wrapper").css({left:"15px"}); } if(hasCommandIsRight()){ $("#wish_search_wrapper").css({left:"auto", right:"20px"}); $("#wish_search_setting_wrapper").css({left:"auto", right:"126px"}); } //设置列表高度 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("fast"); $(this).html("开启聚合搜索"); $("#wish_search_settingbtn").hide(); GM_setValue(wish_s_open_key, 0); } else { //开启 $("#wish_search_content").show("fast"); $(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(); //用户帮助点击事件 $("#wish_search_setting_title sup").click(function(){ alert($(this).attr("title")); }); //初始化用户选择符 getUserSelector(); //获取查询关键词 getQueryPramValue(); /////////////////////////////// 设置窗口开始 ///////////////////////////// //计算设置窗口宽度 var winW=$(window).width(), settingW=$("#wish_search_setting_wrapper").outerWidth(true); if(winW-settingW < 0){ var areaW=800-(settingW-winW)-126; if(areaH<327) areaH = 327; $("#wish_search_setting_searchlist").css("width", areaW+"px"); } //计算设置窗口高度 var settingViewH = winH-8, settingH=$("#wish_search_setting_wrapper").outerHeight(true); if(settingViewH-settingH < 0){ var areaH = 480-(settingH-settingViewH)+60; if(areaH<38) areaH = 38; $("#wish_search_setting_searchlist").css("height", areaH+"px"); } //校验设置数据 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.indexOf("#keyword#")===-1){ alert("以下数据缺少#keyword#,请检查后重试!\n" + link); return false; } if(link.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("fast"); }, 1000); }); //设置按钮被点击 $("#wish_search_settingbtn").click(function(){ $("#wish_search_setting_wrapper").toggle("fast"); $("#wish_search_setting_searchlist").focus(); }); //设置关闭 $("#wish_search_setting_close_a,#wish_search_openclose").click(function(){ $("#wish_search_setting_wrapper").hide("fast"); }); //设置恢复出厂设置 $("#wish_search_setting_reset").click(function(){ if(confirm("您确定要恢复到出厂设置吗?将会清除现有设置且不可恢复!")){ $("#wish_search_setting_searchlist").val(defaultLinkList); var me=$(this); me.html("已恢复到出厂设置,保存后方能生效哦~"); 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"]) !==-1){ if(hasCommandIsBlank() && location.href.indexOf("images/search")!==-1){ return false; } return true; } if($.inArray(document.domain, ["www.google.com","www.google.com.hk"]) !==-1){ if(hasCommandIsBlank() && location.href.indexOf("tbm=")!==-1){ return false; } return true; } var linkArr = data.split(/\r*?\n|\r/); for(var i in linkArr){ var link=$.trim(linkArr[i]); if(link!==""){ if(link.toLowerCase().indexOf(document.domain.toLowerCase()) !== -1 && !/\[\s*?新窗口(打开)?\s*?\]/.test(link)){ return true; } } } return false; } //开始执行 if(isDomainAllow()){ main(); } })();