任意网页【快速按2次Ctrl键】均可开启资源搜索,并且可自由切换搜索##,搜索关键词会自动填充(关键词来源:1、鼠标选中的词;2、已经搜索使用的词),避免关键词重复输入。👉时间就是金钱,快速搜索,一步直达👈 。脚本现在已内置常用搜索##,包括:常见搜索引擎、视频网站、音乐网站、购物网站、知识搜索等,更多快捷功能请查看详情~
// ==UserScript== // @name Onestep Search - 一键快搜,纵享丝滑搜索体验 // @version 1.0.2 // @author Xanthella // @namespace Xanthella_Onestep_Search // @description 任意网页【快速按2次Ctrl键】均可开启资源搜索,并且可自由切换搜索##,搜索关键词会自动填充(关键词来源:1、鼠标选中的词;2、已经搜索使用的词),避免关键词重复输入。👉时间就是金钱,快速搜索,一步直达👈 。脚本现在已内置常用搜索##,包括:常见搜索引擎、视频网站、音乐网站、购物网站、知识搜索等,更多快捷功能请查看详情~ // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABK9JREFUWEfVl01PXFUYx//n3JdhLsMwMGRABQbFGLQaTLeaFDfGdGFcGD+DibUpL4OpC8NGW6AgNjVx08SFrmviRlfWb0DjpgsSgdIWOh2GIeVeZubce8xzZg7MC/MCG+JJmHtn7rnn+Z3/83ZgOOfBztk+/n8AVyd3frZMc6IQiP6QYaEghCkhRbSj42/Ltm/OzYXvn0bVthRYnPMmtl3vdwZEaHHHsuBY9pEdr1hEAAm65kXxMBKy79640XOlHZCWAFOp9H2TGZe6HQcmGFj5Da5vAARSHtmiu8e5HCzD2FhajI+0gmgKMJ16vsYYH734Vhe2NgJYnIEzoNK4NkAQgQSK9AHALRSx67ni9nLCagbREICMh6zQ6OUPwxge4bj3i4DBGCxeWs4kEgAikPAlqQCQaQIpBseqPDtw924t9PQ0gjgRQO/8k8tRJEc4fvvVh82hAMwygM0ZPLJcMfJ+CUaDkRq7rotiEDR0x4kAV6eeyc8+7sV7lwzc+U7AMUvTwgbFAMMrb0LFghNl###lvH0gm5V4kZNKkUJQgiAgUiTjupAymFxYiK/UKlEHcGVy52nc6RwYeyOEkMGwvSnVlXbc18uRGGvsUZq7vRkowyW3SHVP47l7sL0w3/tSSwC9+6ebEuktKMOkQN8QQ3ywZdIoYILwhFQxQYpoV9yc76lboOqH69ezd4Qvv7h4oUvtOv1IqmCjSePvG60y6uj52j8B0hmqDMcqUCwciuKfK0uJjyoXqgKYnsmsRkKh8U7bQtjkaucGA6IxjuSF1rvXC5MKW+v+USx4ohQUJ7mhGiC1m01EOmMU7aSABng5aSA+2LYAKhgfPjgG0MH4ZD8nVpaq60IVwJfTO95gNNZBfifpNUBiiKN/uH0FzgwwncqsJyKRpFZA5z5F/9ApXbDxr39UE7QCj/f3Dn9Y6g83joFUZr3LDiWdcgwQACkRjTG89na5ArXhCYqBSgAdA+mDFxuLC9X9oUrXqZn0qmWY43HHUTFASoRNBuo1w6/yttKQ5KcscEUp/3UtoE4ppXww923Xuw0VoAezX+3KPqdTAVDToSygexqvv8MR6W4eC2Q8sxvUleQn+zmsLCWa1wEyMjObzSY6nZgqveXCr11Bvw0McwycEJC0c5K+0jjN1/Jv5fb2bi/31zWlOiI6fKQ97y9SgRTQu69UghYmJeiPDNOgq65+WmJdBRvJT/MadMPMusV5stdx1BlAt156oewNBUYGaFD7re6LxyVYwzRqyw0dmko9X4uEOkbDllUH0SwRas8DClBKHBSKyBcLdW25aUTNzGZWTcbHSQkatWpUgtSeiPQzEilfVqoginALhY3vbx2nYsvyRhDC98d7wg5IDT10hui2WwlDPqe5onw60s98KZHzXNgG+3FxvlcdWlsC0KTPrz2asLl9jzMWIxCVIRUw9J26XWnIQ5Ozu3k/+FSC9Xd1lObToIzwCh7ywv3gp5UhdXxvC6Byd998nfvDE2IsL0R32CwdzQMEOd/3Hy7XtFoq7YyxpBMKo+BLZZwDp3NBs4Br59nkTGY9AJI0t9b4mRRox2jtHHLhaKwPqRP+azq1C84C0Oydcwf4D8x7Xj+dMIJdAAAAAElFTkSuQmCC // @match *://*/* // @grant GM_openInTab // @grant GM_setClipboard // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant GM_addElement // @grant GM_addStyle // @grant GM_registerMenuCommand // @run-at document-end // @connect baidu.com // @unsafeWindow // @license GPL-3.0-only // @noframes // ==/UserScript== (function () { 'use strict'; //=========================定义网站数据======================================= function SiteInfo(_name, _url, _homepage, _icon) { this.name = _name; this.url = _url; this.home = _homepage; this.icon = _icon; this.callSiteInformation = function (_enable = true) { return { name: _name, url: _url, home: _homepage, icon: _icon, enable: _enable, }; }; }; const defaultIcons ={ default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAdFJREFUWEftVkFugzAQxOQVQflL6cvSvCzJXyLyCnA1yIMmy2JMWymqBBdksHdnx+NZh+rNT3hz/moH8D8ZOJ1O7TAMbYzxI4Rwp466rvvaqqliBpC07/tzCKFdSXLZAqQIQNM0qOzMxDHG2+FwuHAsbCi4IiCrAGzyrutma47H45XMAJywtAoiC8AkR8UTC1VVjcGTHq4cgxW7LrcliwAkcFXX9efj8bhRfASC70g4DMOVc7gtCsL+Uw0tAhBaZzRq1SnY2UtiY6TxXRlxAWj13p4nmqNW4s2zccgKdPJ8Pkf2XABC36KImqYZAWgw73gyFhniOgLOAsjtHQLDiFhJzhvABP6Lj0yFuQC4dzkApY7nGNgLqy8AMBlq/wsANjHNC/HdU6D7njy+3cKAQ7MlydXTxACrhjiIPre/mnBUs/QIrXaNzRmAZKVTh9MywIxNxpOAN/qDUlxynF80YH3fExoAMhneTEj96JqS47zohFv83DMYXb9kZotGVOrntjdgHYSL9iyNK9sRt7bjKZh3R3AuK79rxx4TFJ32/PQN17PpQlJ6hFcZMCAw1DvBTKdrvcEuKAbgqBuNiMfyXtf1zbpciV3/CEBJ4NI5O4CdgW/CP38w2oLQPwAAAABJRU5ErkJggg==", baidu:'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzI3MzM3MTI2OTgyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijg2ODEiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik0xODQuNjgyMDU4IDUzOC43NTg3NzFjMTExLjE3Njg3Ny0yMy44NzM0NzggOTYuMDI5MDg2LTE1Ni43MzY1OTMgOTIuNzAxNjktMTg1Ljc3NTY3Ny01LjQ0NDgyOC00NC43Njg1ODgtNTguMTAxNDM2LTEyMy4wMjA1NDItMTI5LjYwNTUyNi0xMTYuODMxMTIyLTg5Ljk3OTI3NiA4LjA3NDE2OC0xMDMuMTI1OTc3IDEzOC4wNTE5OTEtMTAzLjEyNTk3NyAxMzguMDUxOTkxLTEyLjE2OTQyNCA2MC4wNzkyNTggMjkuMTMyMTU4IDE4OC40NTE1NTQgMTQwLjAyOTgxMyAxNjQuNTU0ODA4eiBtMTE4LjA2NDM1MiAyMzEuMTAyNzA5Yy0zLjI1NzU5IDkuMzMwNjY3LTEwLjUxNzM2IDMzLjIyNzQxMy00LjIzNDg2NyA1NC4wMjk0NDkgMTIuNDAyMTA5IDQ2LjY3NjYwNCA1Mi45MTI1NjEgNDguNzcwNzY5IDUyLjkxMjU2MiA0OC43NzA3NjloNTguMjE3Nzc4VjczMC4zNTE1NzJoLTYyLjMzNjMwMmMtMjguMDE1MjcgOC4zNTMzOS00MS41MzQyNjYgMzAuMTU1OTcyLTQ0LjU1OTE3MSAzOS41MDk5MDh6IG04OC4yODA2NzYtNDUzLjg5ODU2NGM2MS40MDU1NjMgMCAxMTEuMDM3MjY2LTcwLjY2NjQyNCAxMTEuMDM3MjY2LTE1OC4wMzk2MjkgMC04Ny4yODAxMzEtNDkuNjMxNzAzLTE1Ny45MjMyODctMTExLjAzNzI2Ni0xNTcuOTIzMjg3LTYxLjMxMjQ4OSAwLTExMS4wNjA1MzQgNzAuNjQzMTU2LTExMS4wNjA1MzQgMTU3LjkyMzI4NyAwIDg3LjM3MzIwNSA0OS43NzEzMTQgMTU4LjAzOTYyOSAxMTEuMDYwNTM0IDE1OC4wMzk2Mjl6IG0yNjQuNDY5NzMzIDEwLjQ0NzU1NWM4Mi4wNjc5ODggMTAuNjU2OTcxIDEzNC44NDA5MzgtNzYuOTI1NjUgMTQ1LjMzNTAzLTE0My4zMTA2NzEgMTAuNzAzNTA4LTY2LjI5MTk0Ny00Mi4yNTU1OS0xNDMuMjg3NDAyLTEwMC4zNTcwMjYtMTU2LjUyNzE3Ny01OC4yMTc3NzktMTMuMzU2MTE3LTEzMC45MDg1NjIgNzkuOTA0MDE3LTEzNy41NDAwODQgMTQwLjcwNDU5OS03LjkxMTI4OSA3NC4zMTk1NzggMTAuNjMzNzAzIDE0OC41OTI2MiA5Mi41NjIwOCAxNTkuMTMzMjQ5eiBtMjAxLjA4NjM0OCAzOTAuMjEyNjg4cy0xMjYuOTc2MTg2LTk4LjIzOTU5My0yMDEuMTA5NjE3LTIwNC40MTM3NDNjLTEwMC40NzMzNjgtMTU2LjU1MDQ0NS0yNDMuMjAyMzI3LTkyLjg0MTMwMi0yOTAuOTQ5MjgyLTEzLjIxNjUwNi00Ny41Mzc1MzkgNzkuNjAxNTI3LTEyMS42MjQ0MzIgMTI5Ljk1NDU1NC0xMzIuMTQxNzkyIDE0My4yODc0MDMtMTAuNjgwMjQgMTMuMTIzNDMyLTE1My4zODU5MyA5MC4xNjU0MjQtMTIxLjY5NDIzNyAyMzAuODcwMDIzIDMxLjY2ODQyNCAxNDAuNjExNTI1IDE0Mi45MzgzNzUgMTM3LjkzNTY0OCAxNDIuOTM4Mzc0IDEzNy45MzU2NDhzODEuOTk4MTgyIDguMDc0MTY4IDE3Ny4xMTk3OTctMTMuMjE2NTA2Yzk1LjE2ODE1MS0yMS4xMDQ1MjYgMTc3LjA5NjUyOCA1LjI1ODY4IDE3Ny4wOTY1MjggNS4yNTg2ODFzMjIyLjI4Mzk0OCA3NC40MzU5MjEgMjgzLjEwNzc5OC02OC44NTE0ODJjNjAuNzU0MDQ1LTE0My4zMzM5MzktMzQuMzY3NTctMjE3LjY1MzUxOC0zNC4zNjc1NjktMjE3LjY1MzUxOHogbS0zODAuMzIzNTc4IDIxMy4yNTU3NzJoLTE0NC41MjA2MzJjLTYyLjQwNjEwOC0xMi40NDg2NDYtODcuMjU2ODYyLTU1LjAyOTk5NS05MC4zOTgxMS02Mi4yODk3NjUtMy4wNzE0NDItNy4zNzYxMTMtMjAuODAyMDM2LTQxLjYwNDA3Mi0xMS40MjQ4MzItOTkuODQ1MTE5IDI2Ljk2ODE4OC04Ny4yNTY4NjIgMTAzLjg3MDU2OS05My41MTYwODggMTAzLjg3MDU2OS05My41MTYwODhoNzYuOTI1NjV2LTk0LjU2MzE3MWw2NS41MjQwODcgMS4wMDA1NDZ2MzQ5LjIxMzU5N3ogbTI2OS4xNDY3MDEtMS4wMDA1NDVoLTE2Ni4yOTk5NDZjLTY0LjQ1MzczNi0xNi42MTM3MDctNjcuNDU1MzcyLTYyLjQwNjEwOC02Ny40NTUzNzEtNjIuNDA2MTA4di0xODMuODkwOTI5bDY3LjQ1NTM3MS0xLjA5MzYxOXYxNjUuMjc2MTMxYzQuMTE4NTI0IDE3LjYzNzUyIDI2LjAxNDE3OSAyMC44MjUzMDQgMjYuMDE0MTggMjAuODI1MzA1aDY4LjUyNTcyMnYtMTg1LjAwNzgxN2g3MS43NjAwNDR2MjQ2LjI5NzAzN3ogbTIzNS40MDczOC00OTAuOTg4NTQ4YzAtMzEuNzYxNDk4LTI2LjM4NjQ3NS0xMjcuMzk1MDE5LTEyNC4yMzA1MDMtMTI3LjM5NTAxOS05OC4wMDY5MDggMC0xMTEuMTA3MDcxIDkwLjI1ODQ5OC0xMTEuMTA3MDcyIDE1NC4wNjA3MTYgMCA2MC44OTM2NTYgNS4xNDIzMzggMTQ1Ljg5MzQ3NCAxMjYuODgzMTEyIDE0My4xOTQzMjkgMTIxLjc4NzMxMS0yLjY5OTE0NiAxMDguNDU0NDYzLTEzNy45MzU2NDggMTA4LjQ1NDQ2My0xNjkuODYwMDI2eiBtMCAwIiBmaWxsPSIjMzI0NURGIiBwLWlkPSI4NjgyIj48L3BhdGg+PC9zdmc+', google:'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzI3MzM3MTAzNzc2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjczOTQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik0yMTQuMTAxMzMzIDUxMmMwLTMyLjUxMiA1LjU0NjY2Ny02My43MDEzMzMgMTUuMzYtOTIuOTI4TDU3LjE3MzMzMyAyOTAuMjE4NjY3QTQ5MS44NjEzMzMgNDkxLjg2MTMzMyAwIDAgMCA0LjY5MzMzMyA1MTJjMCA3OS43MDEzMzMgMTguODU4NjY3IDE1NC44OCA1Mi4zOTQ2NjcgMjIxLjYxMDY2N2wxNzIuMjAyNjY3LTEyOS4wNjY2NjdBMjkwLjU2IDI5MC41NiAwIDAgMSAyMTQuMTAxMzMzIDUxMiIgZmlsbD0iI0ZCQkMwNSIgcC1pZD0iNzM5NSI+PC9wYXRoPjxwYXRoIGQ9Ik01MTYuNjkzMzMzIDIxNi4xOTJjNzIuMTA2NjY3IDAgMTM3LjI1ODY2NyAyNS4wMDI2NjcgMTg4LjQ1ODY2NyA2NS45NjI2NjdMODU0LjEwMTMzMyAxMzYuNTMzMzMzQzc2My4zNDkzMzMgNTkuMTc4NjY3IDY0Ni45OTczMzMgMTEuMzkyIDUxNi42OTMzMzMgMTEuMzkyYy0yMDIuMzI1MzMzIDAtMzc2LjIzNDY2NyAxMTMuMjgtNDU5LjUyIDI3OC44MjY2NjdsMTcyLjM3MzMzNCAxMjguODUzMzMzYzM5LjY4LTExOC4wMTYgMTUyLjgzMi0yMDIuODggMjg3LjE0NjY2Ni0yMDIuODgiIGZpbGw9IiNFQTQzMzUiIHAtaWQ9IjczOTYiPjwvcGF0aD48cGF0aCBkPSJNNTE2LjY5MzMzMyA4MDcuODA4Yy0xMzQuMzU3MzMzIDAtMjQ3LjUwOTMzMy04NC44NjQtMjg3LjIzMi0yMDIuODhsLTE3Mi4yODggMTI4Ljg1MzMzM2M4My4yNDI2NjcgMTY1LjU0NjY2NyAyNTcuMTUyIDI3OC44MjY2NjcgNDU5LjUyIDI3OC44MjY2NjcgMTI0Ljg0MjY2NyAwIDI0NC4wNTMzMzMtNDMuMzkyIDMzMy41NjgtMTI0Ljc1NzMzM2wtMTYzLjU4NC0xMjMuODE4NjY3Yy00Ni4xMjI2NjcgMjguNDU4NjY3LTEwNC4yMzQ2NjcgNDMuNzc2LTE3MC4wMjY2NjYgNDMuNzc2IiBmaWxsPSIjMzRBODUzIiBwLWlkPSI3Mzk3Ij48L3BhdGg+PHBhdGggZD0iTTEwMDUuMzk3MzMzIDUxMmMwLTI5LjU2OC00LjY5MzMzMy02MS40NC0xMS42NDgtOTEuMDA4SDUxNi42NTA2NjdWNjE0LjRoMjc0LjYwMjY2NmMtMTMuNjk2IDY1Ljk2MjY2Ny01MS4wNzIgMTE2LjY1MDY2Ny0xMDQuNTMzMzMzIDE0OS42MzJsMTYzLjU0MTMzMyAxMjMuODE4NjY3YzkzLjk5NDY2Ny04NS40MTg2NjcgMTU1LjEzNi0yMTIuNjUwNjY3IDE1NS4xMzYtMzc1Ljg1MDY2NyIgZmlsbD0iIzQyODVGNCIgcC1pZD0iNzM5OCI+PC9wYXRoPjwvc3ZnPg==', bing:'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzI3MzM3MTE2OTQxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjgyMDEiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik0yOTkuNTc0NDY4IDkwMC42Mjk3ODdjLTQ1Ljc1MzE5MS0yNS44NzIzNC04NC42OTc4NzItNDcuOTMxOTE1LTg2LjYwNDI1NS00OS4wMjEyNzYtMi40NTEwNjQtMS42MzQwNDMtMy4yNjgwODUtOTAuNDE3MDIxLTMuMjY4MDg1LTM4OS4xNzQ0NjggMC0zNjcuMzg3MjM0IDAuMjcyMzQtMzg2LjcyMzQwNCA0LjkwMjEyNy0zODQuODE3MDIyIDYuMjYzODMgMi40NTEwNjQgNzguOTc4NzIzIDI4LjU5NTc0NSA4Ny42OTM2MTcgMzEuMzE5MTQ5IDE2LjA2ODA4NSA1LjE3NDQ2OCA3Ni41Mjc2NiAyNy4yMzQwNDMgNzguOTc4NzI0IDI4LjU5NTc0NSAxLjkwNjM4MyAxLjA4OTM2MiAyLjcyMzQwNCAxMDguOTM2MTcgMi43MjM0MDQgMzA2LjM4Mjk3OSAwIDI3MS4yNTEwNjQgMC41NDQ2ODEgMzA0Ljc0ODkzNiA0LjA4NTEwNiAzMDMuMzg3MjM0IDcuNjI1NTMyLTIuOTk1NzQ1IDIzMS40ODkzNjItMTMyLjA4NTEwNiAyMzUuMzAyMTI4LTEzNS44OTc4NzMgMi45OTU3NDUtMi45OTU3NDUgMS4zNjE3MDItNC42Mjk3ODctMTAuODkzNjE3LTEwLjM0ODkzNi0yOC4wNTEwNjQtMTMuMDcyMzQtOTYuNDA4NTExLTQ1LjQ4MDg1MS0xMDAuMjIxMjc3LTQ3LjY1OTU3NC0yLjE3ODcyMy0xLjM2MTcwMi0xOS42MDg1MTEtNDEuMzk1NzQ1LTM4LjY3MjM0LTg5LjMyNzY2LTE5LjMzNjE3LTQ3LjY1OTU3NC0zNi4yMjEyNzctODkuMDU1MzE5LTM3Ljg1NTMxOS05MS43Nzg3MjMtMS42MzQwNDMtMi45OTU3NDUtMi40NTEwNjQtNS43MTkxNDktMS42MzQwNDMtNi41MzYxNzEgMC41NDQ2ODEtMC44MTcwMjEgMTEuNDM4Mjk4IDIuNDUxMDY0IDIzLjk2NTk1OCA2LjgwODUxMSAxMi41Mjc2NiA0LjYyOTc4NyAzNy4zMTA2MzggMTMuMzQ0NjgxIDU1LjI4NTEwNiAxOS42MDg1MTFzNDIuNDg1MTA2IDE0LjcwNjM4MyA1NC40NjgwODUgMTkuMDYzODMgMzYuNDkzNjE3IDEyLjggNTQuNDY4MDg1IDE5LjA2MzgyOSA0Mi40ODUxMDYgMTQuNzA2MzgzIDU0LjQ2ODA4NSAxOS4wNjM4MyAzNi40OTM2MTcgMTIuOCA1NC40NjgwODYgMTkuMDYzODMgNDIuNDg1MTA2IDE0LjcwNjM4MyA1NC40NjgwODUgMTkuMDYzODNjMTEuOTgyOTc5IDQuMDg1MTA2IDI0LjUxMDYzOCA4LjQ0MjU1MyAyOC4wNTEwNjMgOS41MzE5MTVsNS45OTE0OSAxLjYzNDA0MnYxOTcuOTkxNDlsLTU2LjM3NDQ2OCAzMi42ODA4NTFjLTY0LjI3MjM0IDM2Ljc2NTk1Ny0xNzcuODM4Mjk4IDEwMi40LTE5MC4wOTM2MTcgMTA5LjQ4MDg1MS00LjM1NzQ0NyAyLjcyMzQwNC0zNi4yMjEyNzcgMjAuOTcwMjEzLTcwLjgwODUxMSA0MC44NTEwNjMtNzMuNTMxOTE1IDQyLjQ4NTEwNi03My4yNTk1NzQgNDIuMjEyNzY2LTk4LjMxNDg5NCA1Ni45MTkxNDktMTAuNjIxMjc3IDUuOTkxNDg5LTE5Ljg4MDg1MSAxMS4xNjU5NTctMjAuNDI1NTMxIDEwLjg5MzYxNy0wLjU0NDY4MSAwLTM4LjQtMjEuMjQyNTUzLTg0LjE1MzE5Mi00Ni44NDI1NTN6IiBmaWxsPSIjMEI4MzgzIiBwLWlkPSI4MjAyIj48L3BhdGg+PC9zdmc+', sogou:'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzI3MzQyNjA3NTkxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI5NDQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik01NjkuNzg3ODUxIDY1Ni4zODM3NjNjLTIxLjQ3ODY3IDYuMTM2NzYzLTQzLjk4MDEzNCA5LjcxNjU0MS02Ni40ODE1OTggMTAuNzM5MzM2LTU4LjgxMDY0NSAyLjU1Njk4NS0xMTguMTMyNjg2LTQuNjAyNTcyLTE3NC4zODYzNDctMjEuNDc4NjcxLTQxLjQyMzE1LTExLjI1MDczMi04MS44MjM1MDYtMjYuNTkyNjM5LTEyMC42ODk2Ny00NS4wMDI5MjggMi4wNDU1ODggMzYuODIwNTc3IDQuMDkxMTc1IDczLjY0MTE1NSA2LjY0ODE2IDExMC40NjE3MzMgMjEuOTkwMDY3IDkuNzE2NTQxIDQzLjk4MDEzNCAxNy44OTg4OTIgNjYuOTkyOTk1IDI1LjA1ODQ0OCA2My45MjQ2MTQgMjEuOTkwMDY3IDEyOS44OTQ4MTUgMzcuMzMxOTc0IDE5Ni44ODc4MSA0NS41MTQzMjUgNDQuNDkxNTMxIDQuMDkxMTc1IDg5LjQ5NDQ1OSA0LjA5MTE3NSAxMzMuOTg1OTkgMCA0MS40MjMxNS0zLjA2ODM4MSA4Mi4zMzQ5MDItMTIuMjczNTI2IDEyMS4yMDEwNjgtMjcuNjE1NDMzIDMzLjI0MDc5OS0xMi43ODQ5MjMgNjEuMzY3NjI5LTM1LjI4NjM4NyA4MS44MjM1MDUtNjQuNDM2MDEgMjIuNTAxNDY0LTM3LjMzMTk3NCAyMy4wMTI4NjEtODMuMzU3Njk2IDIuMDQ1NTg4LTEyMS4yMDEwNjgtOS4yMDUxNDQtMTUuMzQxOTA3LTIwLjk2NzI3My0yOS42NjEwMjEtMzQuNzc0OTktNDAuOTExNzUzLTIxLjQ3ODY3LTE3LjM4NzQ5NS00NS41MTQzMjUtMzEuNzA2NjA4LTcxLjA4NDE3LTQyLjQ0NTk0My01My42OTY2NzYtMjEuNDc4NjctMTA4LjkyNzU0Mi0zOC44NjYxNjUtMTY1LjY5MjU5OS01MC42MjgyOTQtMjguMTI2ODMtNS42MjUzNjYtNTUuNzQyMjYzLTE0LjMxOTExMy04MS44MjM1MDYtMjYuNTkyNjQtMTIuMjczNTI2LTUuNjI1MzY2LTIyLjUwMTQ2NC0xNC4zMTkxMTMtMzAuMTcyNDE3LTI1LjU2OTg0NS00LjYwMjU3Mi03LjY3MDk1NC01LjYyNTM2Ni0xNi44NzYwOTgtMi4wNDU1ODgtMjUuNTY5ODQ2IDUuNjI1MzY2LTEwLjczOTMzNSAxNS4zNDE5MDctMTguNDEwMjg5IDI2LjU5MjYzOS0yMi41MDE0NjQgMjAuNDU1ODc2LTcuNjcwOTU0IDQyLjQ0NTk0My0xMC43MzkzMzUgNjQuNDM2MDExLTkuNzE2NTQxIDU1LjIzMDg2NiAxLjUzNDE5MSAxMTAuNDYxNzMyIDkuMjA1MTQ0IDE2NC4xNTg0MDggMjMuMDEyODYxIDQzLjk4MDEzNCAxMC43MzkzMzUgODYuOTM3NDc1IDI0LjAzNTY1NSAxMjguODcyMDIxIDQwLjkxMTc1M2wtNS42MjUzNjYtMTA3LjM5MzM1MWMtMjIuNTAxNDY0LTguMTgyMzUxLTQ1LjAwMjkyOC0xNC44MzA1MS02Ny41MDQzOTItMjAuOTY3Mjc0LTU0LjcxOTQ2OS0xNC4zMTkxMTMtMTEwLjQ2MTczMi0yNS41Njk4NDUtMTY2LjcxNTM5Mi0zMy4yNDA3OTktNTQuMjA4MDcyLTguMTgyMzUxLTEwOS40Mzg5MzktMTAuMjI3OTM4LTE2NC4xNTg0MDgtNi42NDgxNTktMzQuNzc0OTkgMi41NTY5ODUtNjguNTI3MTg2IDkuNzE2NTQxLTEwMS4yNTY1ODggMjEuOTkwMDY3LTI4LjYzODIyNyAxMC43MzkzMzUtNTQuMjA4MDcyIDI3LjYxNTQzMy03NS42ODY3NDMgNDkuMDk0MTAzLTIwLjk2NzI3MyAyMC45NjcyNzMtMzQuMjYzNTkzIDQ4LjA3MTMxLTM4Ljg2NjE2NSA3Ny4yMjA5MzMtMy41Nzk3NzggMTkuOTQ0NDc5LTEuNTM0MTkxIDQwLjQwMDM1NiA1LjYyNTM2NiA1OS4zMjIwNDIgMTAuNzM5MzM1IDIxLjk5MDA2NyAyNy4xMDQwMzYgNDAuOTExNzUzIDQ4LjA3MTMwOSA1My42OTY2NzUgMzcuODQzMzcxIDIzLjUyNDI1OCA3OS4yNjY1MjEgNDEuNDIzMTUgMTIyLjczNTI1OSA1Mi4xNjI0ODUgNDAuNDAwMzU2IDExLjc2MjEyOSA4MS44MjM1MDYgMTkuOTQ0NDc5IDEyMi43MzUyNTggMjguNjM4MjI3IDE5LjQzMzA4MyA0LjA5MTE3NSAzOC4zNTQ3NjggOS43MTY1NDEgNTYuNzY1MDU3IDE2LjM2NDcwMSAxNS44NTMzMDQgNS42MjUzNjYgMzAuNjgzODE1IDEzLjgwNzcxNyA0My45ODAxMzQgMjQuMDM1NjU1IDYuNjQ4MTYgNS4xMTM5NjkgMTEuMjUwNzMyIDExLjc2MjEyOSAxMy4yOTYzMiAxOS40MzMwODIgMS4wMjI3OTQgNy4xNTk1NTctMS41MzQxOTEgMTMuODA3NzE3LTcuMTU5NTU3IDE4LjQxMDI4OS0xMC4yMjc5MzggOC4xODIzNTEtMjAuOTY3MjczIDEzLjI5NjMyLTMyLjcyOTQwMiAxNS44NTMzMDR6IG0zNy44NDMzNzEgMjczLjU5NzM0N2MtMTQ1Ljc0ODExOSAzMi4yMTgwMDUtMjk3LjYzMzAwMS0xMS43NjIxMjktNDAyLjk4MDc2NS0xMTcuMTA5ODkyLTE5Ljk0NDQ3OS0xOS40MzMwODMtMzcuODQzMzcxLTQxLjQyMzE1LTUzLjE4NTI3OC02NC40MzYwMTEtOTkuMjExLTE0Ni43NzA5MTMtOTkuMjExLTMzOS41Njc1NDggMC00ODYuODQ5ODU4IDE1Ljg1MzMwNC0yMy4wMTI4NjEgMzMuNzUyMTk2LTQ0LjQ5MTUzMSA1My4xODUyNzgtNjQuNDM2MDEgMzkuODg4OTU5LTM5Ljg4ODk1OSA4Ni45Mzc0NzUtNzEuMDg0MTcgMTM4LjU4ODU2My05My4wNzQyMzggNTMuMTg1Mjc5LTIyLjUwMTQ2NCAxMTAuNDYxNzMyLTM0LjI2MzU5MyAxNjguMjQ5NTgzLTM0LjI2MzU5MyAxMTUuNTc1NzAyIDAgMjI2LjU0ODgzMSA0Ni41MzcxMTkgMzA3Ljg2MDk0IDEyOC44NzIwMjEgMTIxLjcxMjQ2NCAxMjEuMjAxMDY4IDE2MC4wNjcyMzMgMzAyLjc0Njk3IDk5LjIxMSA0NjMuMzI1Ni0xMy44MDc3MTcgMzYuMzA5MTgxLTMyLjcyOTQwMiA3MC41NzI3NzQtNTUuNzQyMjYzIDEwMS43Njc5ODUtMTAuNzM5MzM1IDE0LjMxOTExMy04LjE4MjM1MSAzNC4yNjM1OTMgNS42MjUzNjYgNDUuMDAyOTI4bDAuNTExMzk3IDAuNTExMzk3YzEyLjc4NDkyMyAxMi4yNzM1MjYgMzMuMjQwNzk5IDExLjc2MjEyOSA0NS41MTQzMjUtMS41MzQxOSAxLjAyMjc5NC0xLjAyMjc5NCAyLjA0NTU4OC0yLjU1Njk4NSAzLjA2ODM4MS00LjA5MTE3NiAxNjUuNjkyNTk5LTIyNC41MDMyNDMgMTE3LjYyMTI4OS01NDEuMDU3OTMtMTA3LjM5MzM1MS03MDYuNzUwNTI5LTI5LjE0OTYyNC0yMS40Nzg2Ny02MC4zNDQ4MzUtMzkuMzc3NTYyLTkzLjA3NDIzNy01NC4yMDgwNzItMjAuOTY3MjczLTkuNzE2NTQxLTQyLjQ0NTk0My0xNy4zODc0OTUtNjQuNDM2MDExLTIzLjUyNDI1OEMzODQuMTUwNzczLTU2LjUwMzUyOSAxMDQuNDE2NjYzIDk4LjQ0OTczNSAyNy4xOTU3MyAzNjYuNDIxNzE2Yy0xMi43ODQ5MjMgNDUuMDAyOTI4LTE5LjQzMzA4MyA5MS4wMjg2NS0xOS40MzMwODMgMTM3LjU2NTc2OC0wLjUxMTM5NyAyNzguMTk5OTE5IDIyNC41MDMyNDMgNTA0LjIzNzM1MyA1MDIuNzAzMTYyIDUwNC43NDg3NSA1NC4yMDgwNzIgMCAxMDguNDE2MTQ1LTguNjkzNzQ3IDE1OS41NTU4MzYtMjUuNTY5ODQ1IDE4LjQxMDI4OS02LjEzNjc2MyAyOC4xMjY4My0yNS41Njk4NDUgMjEuOTkwMDY3LTQzLjk4MDEzNS0wLjUxMTM5Ny0xLjUzNDE5MS0xLjAyMjc5NC0zLjU3OTc3OC0yLjA0NTU4Ny01LjExMzk2OS03LjE1OTU1Ny0xNS4zNDE5MDctMjUuMDU4NDQ5LTIyLjUwMTQ2NC00MC40MDAzNTYtMTYuMzY0NzAxLTE0LjMxOTExMyA0LjYwMjU3Mi0yOC42MzgyMjcgOC42OTM3NDctNDEuOTM0NTQ3IDEyLjI3MzUyNnogbTI2NC4zOTIyMDItNjQuNDM2MDExYy0zNy44NDMzNzEgMzcuODQzMzcxLTgxLjMxMjEwOSA2OS41NDk5OC0xMjguODcyMDIxIDkzLjU4NTYzNS0xNi4zNjQ3MDEgOC42OTM3NDctMjMuMDEyODYxIDI5LjE0OTYyNC0xMy44MDc3MTYgNDYuMDI1NzIydjAuNTExMzk3YzguNjkzNzQ3IDE2LjM2NDcwMSAyOC42MzgyMjcgMjMuMDEyODYxIDQ1LjAwMjkyOCAxNC44MzA1MSA1Ny4yNzY0NTQtMjkuNjYxMDIxIDEwOS40Mzg5MzktNjkuMDM4NTgzIDE1My40MTkwNzMtMTE2LjA4NzA5OCAxMi43ODQ5MjMtMTIuMjczNTI2IDEzLjI5NjMyLTMyLjcyOTQwMiAxLjAyMjc5My00NS41MTQzMjUtMS4wMjI3OTQtMS4wMjI3OTQtMi4wNDU1ODgtMi4wNDU1ODgtMy4wNjgzODEtMi41NTY5ODVsLTQuNjAyNTcyLTMuNTc5Nzc4Yy0xMi4yNzM1MjYtMTAuMjI3OTM4LTMwLjY4MzgxNS05LjIwNTE0NC00MS40MjMxNSAyLjU1Njk4NCIgZmlsbD0iI0U5NDkyNCIgcC1pZD0iMjk0NSI+PC9wYXRoPjwvc3ZnPg==', so360:'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzI3MzM3MDk2MjE2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY5MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik01MzkuMyAxNTUuNGgtMC41YzAgMC41IDAgMC41IDAuNSAwek02MyA2MDUuMmMwLjUgMSAxIDEuNiAxIDIuNiAwLTEuMS0wLjUtMi4xLTEtMi42eiBtNjQzLjQgOC4zYzMwLjcgMCA1NS4yIDI1IDU1LjIgNTUuMiAwIDEyLTMuNiAyMi45LTEwLjQgMzEuOGgwLjVjMzAuNy01MS41IDQ4LjQtMTExLjkgNDguNC0xNzYgMC0xOTAtMTUzLjYtMzQzLjYtMzQzLjYtMzQzLjYtMTkwIDAtMzQzLjYgMTUzLjYtMzQzLjYgMzQzLjYgMCA2MS45IDE2LjcgMTIwLjMgNDUuMyAxNzAuMmgwLjVjLTQuMi03LjgtNi44LTE2LjctNi44LTI2IDAtMzAuNyAyNS01NS4yIDU1LjItNTUuMiAyMC4zIDAgMzcuNSAxMC45IDQ3LjQgMjcuMS0xOS4zLTMzLjgtMzAuNy03My40LTMwLjctMTE1LjYgMC0xMjguNiAxMDQuMS0yMzIuNyAyMzIuNy0yMzIuN1M2ODkuOCAzOTYuNCA2ODkuOCA1MjVjMCA0Mi43LTExLjUgODIuMy0zMS4yIDExNi42IDkuOC0xNi42IDI3LjUtMjguMSA0Ny44LTI4LjF6IiBmaWxsPSIjMjhCNzVBIiBwLWlkPSI2OTEzIj48L3BhdGg+PHBhdGggZD0iTTI1Ni43IDY0Mi43Yy0wLjUtMS0xLTEuNi0xLjYtMi4xIDAuNSAwLjUgMC41IDEuNSAxLjYgMi4xeiIgZmlsbD0iIzI4Qjc1QSIgcC1pZD0iNjkxNCI+PC9wYXRoPjxwYXRoIGQ9Ik03NjIuMSA2NjkuMmMwLTMwLjctMjUtNTUuMi01NS4yLTU1LjItMjAuOCAwLTM4LjUgMTEuNS00Ny45IDI4LjEtNDAgNjkuMy0xMTUgMTE2LjEtMjAxLjQgMTE2LjEtODUuNCAwLTE1OS44LTQ2LjMtMjAwLjQtMTE1aC0wLjVjLTkuNC0xNy4yLTI3LjYtMjkuMi00OC40LTI5LjItMzAuNyAwLTU1LjIgMjUtNTUuMiA1NS4yIDAgMTEuNSAzLjYgMjIuNCA5LjkgMzEuMiA1OC44IDEwMC41IDE2OC43IDE2OC4xIDI5NC4xIDE2OC4xIDEyNS41IDAgMjM0LjgtNjcuMiAyOTUuMi0xNjcuNmgtMC41YzYuMi04LjggMTAuMy0xOS43IDEwLjMtMzEuN3ogbS01NjQuMyA1NC4yYzMuMSAwLjUgNi4yIDEgOS45IDEtMy4xIDAtNi43LTAuNS05LjktMXogbS0xNy43LTYuOGMxIDAuNSAyLjYgMS42IDMuNiAyLjEtMS41LTAuNS0yLjUtMS4xLTMuNi0yLjF6IG03LjMgNC4yYzIuNiAxIDUuMiAyLjEgOC4zIDIuNi0zLjEtMS4xLTUuNy0xLjYtOC4zLTIuNnogbTc1LTYxYzAuNSAzLjEgMSA2LjIgMSA5LjQgMC0zLjEtMC41LTYuMi0xLTkuNHogbS0yLjEtNi43YzAuNSAxIDAuNSAyLjEgMSAzLjEgMC0xLTAuNS0yLjEtMS0zLjF6IG0zOTIgNi43Yy0wLjUgMy4xLTEgNi4yLTEgOS40IDAtMy4xIDAtNi4yIDEtOS40eiBtMS42LTcuOGMtMC41IDEuNi0xIDIuNi0xIDQuMiAwLjQtMS42IDEtMy4xIDEtNC4yeiBtNjIuNCA3MS40Yy0zLjEgMC41LTYuOCAxLTkuOSAxIDMuNyAwIDYuOC0wLjUgOS45LTF6IG0yOC4xLTE0LjFjLTIuMSAxLjYtNC4yIDMuNi02LjIgNS4yIDIuMS0xLjYgNC4yLTMuMSA2LjItNS4yeiBtLTguMyA2LjhjLTIuMSAxLTQuMiAyLjYtNi4yIDMuNiAyLTEuNSA0LjEtMi42IDYuMi0zLjZ6IG0tOC44IDQuMWMtMi42IDEtNS43IDIuMS04LjggMi42IDMtMC41IDYuMi0xIDguOC0yLjZ6IG0xOS43LTEzLjVjMS42LTIuMSAzLjYtMy42IDQuNy01LjctMS41IDIuMS0zLjEgNC4xLTQuNyA1Ljd6IiBmaWxsPSIjRjhCNjE2IiBwLWlkPSI2OTE1Ij48L3BhdGg+PHBhdGggZD0iTTY1NyA2NTcuOGMwIDMwLjUgMjQuNyA1NS4yIDU1LjIgNTUuMiAzMC41IDAgNTUuMi0yNC43IDU1LjItNTUuMiAwLTMwLjUtMjQuNy01NS4yLTU1LjItNTUuMi0zMC41IDAtNTUuMiAyNC43LTU1LjIgNTUuMiIgZmlsbD0iIzI4OTM0OSIgcC1pZD0iNjkxNiI+PC9wYXRoPjxwYXRoIGQ9Ik02NTEuMyA2NjkuMmMwIDMwLjUgMjQuNyA1NS4yIDU1LjIgNTUuMiAzMC41IDAgNTUuMi0yNC43IDU1LjItNTUuMlM3MzYuOSA2MTQgNzA2LjQgNjE0Yy0zMC40IDAtNTUuMSAyNC43LTU1LjEgNTUuMiIgZmlsbD0iI0Y4QjYxNiIgcC1pZD0iNjkxNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xNDYuOCA2NTcuOGMwIDMwLjUgMjQuNyA1NS4yIDU1LjIgNTUuMiAzMC41IDAgNTUuMi0yNC43IDU1LjItNTUuMiAwLTMwLjUtMjQuNy01NS4yLTU1LjItNTUuMi0zMC41IDAtNTUuMiAyNC43LTU1LjIgNTUuMiIgZmlsbD0iIzI4OTM0OSIgcC1pZD0iNjkxOCI+PC9wYXRoPjxwYXRoIGQ9Ik0xNTIuNSA2NjkuMmMwIDMwLjUgMjQuNyA1NS4yIDU1LjIgNTUuMiAzMC41IDAgNTUuMi0yNC43IDU1LjItNTUuMlMyMzguMiA2MTQgMjA3LjcgNjE0Yy0zMC41IDAtNTUuMiAyNC43LTU1LjIgNTUuMk04NTAuNiA4MTMuNGMwIDE5LjcgMTAuNSAzNy45IDI3LjYgNDcuOCAxNy4xIDkuOSAzOC4xIDkuOSA1NS4yIDBzMjcuNi0yOC4xIDI3LjYtNDcuOC0xMC41LTM3LjktMjcuNi00Ny44YTU1LjAxIDU1LjAxIDAgMCAwLTU1LjIgMGMtMTcgOS45LTI3LjYgMjguMS0yNy42IDQ3LjgiIGZpbGw9IiNGOEI2MTYiIHAtaWQ9IjY5MTkiPjwvcGF0aD48L3N2Zz4=', }; // 百度系列 const Baidu = new SiteInfo('百度', 'https://www.baidu.com/s?wd=%s&ie=utf-8', 'https://www.baidu.com/', 'baidu'); const Baidufanyi = new SiteInfo('百度翻译', 'https://fanyi.baidu.com/#auto/zh/%s', 'https://fanyi.baidu.com/', 'baidu_fanyi'); const Baiduwangpan = new SiteInfo('百度网盘', 'https://pan.baidu.com/disk/home?#/search?key=%s', 'https://pan.baidu.com/', 'baidu_wangpan'); const Baidubaike = new SiteInfo('百度百科', 'https://baike.baidu.com/search/word?pic=1&sug=1&word=%s', 'https://baike.baidu.com/', 'baidu_baike'); const Baiduzhidao = new SiteInfo('百度知道', 'https://zhidao.baidu.com/search?word=%s', 'https://zhidao.baidu.com/', 'baidu_zhidao'); const Baiduxinwen = new SiteInfo('百度新闻', 'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&rsv_dl=ns_pc&word=%s', 'http://news.baidu.com/', Baidu.icon); const Baiduwenku = new SiteInfo('百度文库', 'https://wenku.baidu.com/search?word=%s', 'https://wenku.baidu.com/', 'baidu_wenku'); const Baidumap = new SiteInfo('百度地图', 'https://map.baidu.com/search?querytype=s&wd=%s', 'https://map.baidu.com/', 'baidu_map'); const Baidutupian = new SiteInfo('百度图片', 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%s', 'https://image.baidu.com/', Baidu.icon); const Baiduxueshu = new SiteInfo('百度学术', 'http://xueshu.baidu.com/s?wd=%s', 'http://xueshu.baidu.com/', Baidu.icon); const Baidutieba = new SiteInfo('贴吧', 'https://tieba.baidu.com/f?kw=%s&ie=utf-8', 'https://tieba.baidu.com/', 'baidu_tieba'); // 谷歌系列 const Google = new SiteInfo('谷歌', 'https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8', 'https://www.google.com/', 'google'); const Googlefanyi = new SiteInfo('谷歌翻译', 'https://translate.google.com/?q=%s', '', 'google_translate'); const Googlemap = new SiteInfo('谷歌地图', 'https://www.google.com/maps/search/%s', 'https://www.google.com/maps/', 'google_map'); const Googleearth = new SiteInfo('谷歌地球', 'https://earth.google.com/web/search/%s', 'https://earth.google.com/web/', 'google_earth'); const Googlexueshu = new SiteInfo('谷歌学术', 'https://scholar.google.com/scholar?hl=zh-CN&q=%s', '', Google.icon); const Googlepic = new SiteInfo('谷歌图片', 'https://www.google.com/search?q=%s&tbm=isch', 'https://www.google.com/imghp?hl=zh-CN', Google.icon); const Googlenews = new SiteInfo('谷歌新闻', 'https://news.google.com/search?q=%s&hl=zh-CN&gl=CN&ceid=CN:zh-Hans', 'https://news.google.com/topstories?hl=zh-CN&gl=CN&ceid=CN:zh-Hans', 'google_news'); const StackOverflow = new SiteInfo('StackOverflow', 'https://stackoverflow.com/search?q=%s', '', 'stackoverflow'); const Zhihu = new SiteInfo('知乎', 'https://www.zhihu.com/search?q=%s', 'https://www.zhihu.com/', 'zhihu'); const Bing = new SiteInfo('必应', 'https://cn.bing.com/search?q=%s', 'https://cn.bing.com/', 'bing'); const Bilibili = new SiteInfo('哔哩哔哩', 'https://search.bilibili.com/all?keyword=%s', 'https://www.bilibili.com/', 'bilibili'); const Taobao = new SiteInfo('淘宝', 'https://s.taobao.com/search?q=%s', 'https://www.taobao.com/', 'taobao'); const Jingdong = new SiteInfo('#东', 'https://search.jd.com/Search?keyword=%s&enc=utf-8', 'https://www.jd.com/', 'jd'); const Tianmao = new SiteInfo('天猫', 'https://list.tmall.com/search_product.htm?q=%s', 'https://www.tmall.com/', 'tmall'); const Maimai = new SiteInfo('脉脉', 'https://maimai.cn/web/search_center?type=gossip&query=%s&highlight=true', 'https://maimai.cn/feed_list', 'maimai'); const Weibo = new SiteInfo('微博', 'https://s.weibo.com/weibo/%s', 'https://weibo.com/', 'weibo'); const GitHub = new SiteInfo('GitHub', 'https://github.com/search?q=%s', 'https://github.com/' , 'github'); //短视频 const Douyin = new SiteInfo('抖音', 'https://www.douyin.com/search/%s', 'https://www.douyin.com/' , 'douyin'); const Kuaishou = new SiteInfo('快手', 'https://www.kuaishou.com/search/video?searchKey=%s', 'https://www.kuaishou.com/' , 'kuaishou'); const Sogou = new SiteInfo('搜狗', 'https://www.sogou.com/web?query=%s', 'https://www.sogou.com/', 'sogou'); const So360 = new SiteInfo('360', 'https://www.so.com/s?ie=utf-8&q=%s', 'https://www.so.com/', 'so360'); const Bookmarkearth = new SiteInfo('书签搜索', 'https://www.bookmarkearth.cn/s/search?q=%s', 'https://www.bookmarkearth.cn', 'bookmarkearth'); //=========================定义网站数据======================================= const defaultConf = { showToolbar: false, // 显示划词工具条 showFrequentEngines: true, // 显示常用搜索引擎 showClassifiedEngines: true, // 显示分类搜索引擎 showPlaceholder: true, // 显示使用方式提示信息(如搜索框placeholder) enableOnInput: false, // 是否在input/textarea上启用划词和快捷键 autoCopyToClipboard: false, // 划词时自动复制到剪贴板(内容为文本格式) // // 搜索框默认搜索引擎 // 属性: // - name 搜索引擎名称 // - url 搜索引擎搜索url // - home 搜索引擎主页url // defaultEngine: { name: Baidu.name, url: Baidu.url, home: Baidu.home, icon: Baidu.icon }, // // 绑定快捷键的搜索引擎列表 // 属性: // - name 搜索引擎名称 // - url 搜索引擎搜索url // - home 搜索引擎主页url // - hotkeys 快捷键列表, 仅支持配置单字符按键的code值, 实际起作用的是Alt+单字符键, S/D/F/L键已被脚本征用 // - enable 是否启用 // hotkeyEngines: [ { name: '百度百科', url: 'https://baike.baidu.com/search/word?pic=1&sug=1&word=%s', home: 'https://baike.baidu.com/', hotkeys: ['KeyW'], enable: true, }, { name: '百度翻译', url: 'https://fanyi.baidu.com/#auto/zh/%s', home: 'https://fanyi.baidu.com/', hotkeys: ['KeyE'], enable: true, }, { name: '百度', url: Baidu.url, home: Baidu.home, hotkeys: ['KeyB'], enable: true, }, { name: 'Google', url: Google.url, home: Google.home, hotkeys: ['KeyG'], enable: true, }, ], // // 常用搜索引擎列表 // 属性: // - name 搜索引擎名称 // - url 搜索引擎搜索url // - home 搜索引擎主页url // - icon 搜索引擎图标, base64编码 // - enable 是否启用 // frequentEngines: [ Baidu.callSiteInformation(), Baidubaike.callSiteInformation(), Zhihu.callSiteInformation(), Bilibili.callSiteInformation(), Douyin.callSiteInformation(), { name: '公众号', url: 'https://weixin.sogou.com/weixin?ie=utf8&type=2&query=%s', icon: 'gongz####hao', enable: true }, Bookmarkearth.callSiteInformation() ], // // 分类搜索引擎列表, 二维数组, 默认认为该配置包含了所有已配置搜索引擎 // 一级分类属性: // - name 分类名称 // - enable 该分类是否启用 // - engines 该分类下的搜索引擎列表 // 二级搜索引擎属性: // - name 搜索引擎名称 // - url 搜索引擎搜索url // - home 搜索引擎主页url // - icon 搜索引擎图标, base64编码 // - enable 搜索引擎是否启用 // classifiedEngines: [ { name: '搜索', ident:'search-engines', enable: true, engines: [ Baidu.callSiteInformation(), Google.callSiteInformation(), Bing.callSiteInformation(), Sogou.callSiteInformation(), So360.callSiteInformation() ] }, { name:'视频', ident:'video', enable: true, engines:[ { name: '腾讯视频', url: 'https://v.qq.com/x/search/?q=%s', home: 'https://v.qq.com/', icon: 'tengxunshipin', enable: true }, { name: '#奇艺', url: 'https://www.iqiyi.com/search/%s.html', home: 'https://www.iqiyi.com/', icon: 'iqiyi', enable: true }, { name: '优#', url: 'https://so.youku.com/search_video/q_%s', home: 'https://www.youku.com/', icon: 'youku', enable: true }, { name: '#果TV', url: 'https://so.mgtv.com/so?k=%s&lastp=so_r###lt', home: 'https://www.mgtv.com/', icon: 'mgtv', enable: true }, Bilibili.callSiteInformation(), Douyin.callSiteInformation(), Kuaishou.callSiteInformation() ] }, { name: '音乐', ident:'music', enable: true, engines: [ { name: '网易云音乐', url: 'https://music.163.com/#/search/m/?s=%s', icon: "music163", enable: true }, { name: 'QQ音乐', url: 'https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%s', icon: "qqyinyue", enable: true }, { name: '#我音乐', url: 'http://www.kuwo.cn/search/list?type=all&key=%s', icon: 'kuwoyinyue', enable: true }, { name: '咪咕音乐', url: 'https://music.migu.cn/v3', icon: 'migu', enable: true }, { name: '#狗音乐', url: 'https://www.kugou.com/yy/html/search.html#searchType=song&searchKeyWord=%s', home: 'https://www.kugou.com/', icon: 'kugou', enable: true } ] }, { name: '购物', ident:'shopping', enable: true, engines: [ Taobao.callSiteInformation(), Jingdong.callSiteInformation(), Tianmao.callSiteInformation(), { name: '1688', url: 'https://s.1688.com/selloffer/offer_search.htm?keywords=%s', home: 'http://www.1688.com/', icon: '1688', enable: true }, { name: '当当', url: 'http://search.dangdang.com/?key=%s&act=input', home: 'http://www.dangdang.com/', icon: 'dangdang', enable: true }, { name: '苏宁', url: 'https://search.suning.com/%s/', home: 'https://www.suning.com/', icon: 'suning', enable: true }, { name: '唯品会', url: 'https://category.vip.com/suggest.php?keyword=%s', icon: 'vip', enable: true } ] }, { name: '知识', ident: 'knowledge', enable: true, engines: [ Zhihu.callSiteInformation(), Maimai.callSiteInformation(), Baiduzhidao.callSiteInformation(), Baidubaike.callSiteInformation(), { name: 'Quora', url: 'https://www.quora.com/search?q=%s', icon: 'quora', enable: true }, { name: '维基百科', url: 'https://zh.wikipedia.org/wiki/%s', icon: 'wikipedia', enable: true }, { name: '萌娘百科', url: 'https://zh.moegirl.org/%s', icon: 'moegirl', enable: true }, { name: '果壳', url: 'https://www.guokr.com/search/all/?wd=%s', icon: 'guokr', enable: true } ] }, { name: '社交', ident:'social-interaction', enable: true, engines: [ Weibo.callSiteInformation(), Baidutieba.callSiteInformation(), Zhihu.callSiteInformation(), { name: '豆瓣', url: 'https://www.douban.com/search?q=%s', home: 'https://www.douban.com/', icon: 'douban', enable: true }, { name: 'Twitter', url: 'https://twitter.com/search?q=%s', icon: 'twitter', enable: false }, { name: 'Facebook', url: 'https://www.facebook.com/search/r###lts.php?q=%s', icon: 'facebook', enable: false } ] }, { name: '翻译', ident:'translate', enable: true, engines: [ Baidufanyi.callSiteInformation(), Googlefanyi.callSiteInformation(), { name: '有道词典', url: 'https://youdao.com/w/%s', icon: 'youdao', enable: true }, { name: '必应翻译', url: 'https://cn.bing.com/dict/search?q=%s', home: 'https://www.bing.com/dict', icon: Bing.icon, enable: true }, { name: '海词词典', url: 'http://dict.cn/%s', icon: 'haidii', enable: true }, { name: 'CNKI翻译', url: 'http://dict.cnki.net/dict_r###lt.aspx?scw=%s', icon: 'cnki', enable: false }, { name: 'deepL', url: 'https://www.deepl.com/translator#en/zh/%s', icon: 'deepl', enable: true }, ] }, { name: '地图', ident:'map', enable: true, engines: [ Baidumap.callSiteInformation(), { name: '高德地图', url: 'https://www.amap.com/search?query=%s', icon: "gaodemap", enable: true }, Googlemap.callSiteInformation(), Googleearth.callSiteInformation() ] }, { name: '图片', ident:'picture', enable: true, engines: [ { name: '阿里矢量图', url: 'https://www.iconfont.cn/search/index?searchType=icon&q=%s', home: 'https://www.iconfont.cn/', icon: "iconfont", enable: true }, { name: 'pixiv', url: 'https://www.pixiv.net/tags/%s', home: 'https://www.pixiv.net/', icon: "pixiv", enable: true }, { name: 'flickr', url: 'https://www.flickr.com/search/?q=%s', home: 'https://www.flickr.com/', icon: "flickr", enable: true }, { name: '花瓣', url: 'https://huaban.com/search/?q=%s', home: 'https://huaban.com/', icon: "huaban", enable: true }, Baidutupian.callSiteInformation(), { name: '搜狗图片', url: 'https://pic.sogou.com/pics?query=%s', home: 'https://pic.sogou.com/', icon: "sogou", enable: true }, { name: '必应图片', url: 'https://www.bing.com/images/search?q=%s', home: 'https://www.bing.com/images/trending', icon: "bing", enable: true }, Googlepic.callSiteInformation() ] }, { name: '学术', ident:'academic', enable: true, engines: [ Googlexueshu.callSiteInformation(), Baiduxueshu.callSiteInformation(), { name: '知网', url: 'http://epub.cnki.net/kns/brief/default_r###lt.aspx?txt_1_value1=%s&dbPrefix=SCDB&db_opt=CJFQ%2CCJFN%2CCDFD%2CCMFD%2###FD%2CIPFD%2CCCND%2CCCJD%2CHBRD&singleDB=SCDB&action=scdbsearch', icon: 'cnki', enable: true }, { name: '万方', url: 'http://www.wanfangdata.com.cn/search/searchList.do?searchType=all&searchWord=%s', icon: 'wanfangdata', enable: true }, { name: 'WOS', url: 'http://apps.webofknowledge.com/UA_GeneralSearch.do?fieldCount=3&action=search&product=UA&search_mode=GeneralSearch&max_field_count=25&max_field_notice=Notice%3A+You+cannot+add+another+field.&input_invalid_notice=Search+Error%3A+Please+enter+a+search+term.&input_invalid_notice_limits=+%3Cbr%2F%3ENote%3A+Fields+displayed+in+scrolling+boxes+must+be+combined+with+at+least+one+other+search+field.&sa_img_alt=Select+terms+from+the+index&value(input1)=%s&value%28select1%29=TI&value%28hidInput1%29=initVoid&value%28hidShowIcon1%29=0&value%28bool_1_2%29=AND&value%28input2%29=&value%28select2%29=AU&value%28hidInput2%29=initAuthor&value%28hidShowIcon2%29=1&value%28bool_2_3%29=AND&value%28input3%29=&value%28select3%29=SO&value%28hidInput3%29=initSource&value%28hidShowIcon3%29=1&limitStatus=collapsed&expand_alt=Expand+these+settings&expand_title=Expand+these+settings&collapse_alt=Collapse+these+settings&collapse_title=Collapse+these+settings&SinceLastVisit_UTC=&SinceLastVisit_DATE=×panStatus=display%3A+block&timeSpanCollapsedListStatus=display%3A+none&period=Range+Selection&range=ALL&ssStatus=display%3Anone&ss_lemmatization=On&ss_query_language=&rsStatus=display%3Anone&rs_rec_per_page=10&rs_sort_by=PY.D%3BLD.D%3BVL.D%3BSO.A%3BPG.A%3BAU.A&rs_refinePanel=visibility%3Ashow', icon: 'webofknowledge', enable: true }, { name: 'Springer', url: 'http://rd.springer.com/search?query=%s', icon: 'springer', enable: true }, { name: 'Letpub', url: 'https://www.letpub.com.cn/index.php?page=journalapp&view=search&searchsort=relevance&searchname=%s', home: 'https://www.letpub.com.cn/', icon: '', enable: true }, { name: '科研通', url: 'https://www.ablesci.com/journal/index?keywords=%s', home: 'https://www.ablesci.com/', icon: 'ablesci', enable: true } ] }, { name: '开发', ident:'development', enable: true, engines: [ StackOverflow.callSiteInformation(), { name: 'Apache Issues', url: 'https://issues.apache.org/jira/secure/QuickSearch.jspa?searchString=%s', home: 'https://issues.apache.org/jira/', icon: 'apache', enable: true }, GitHub.callSiteInformation(), { name: 'Maven', url: 'https://mvnrepository.com/search?q=%s', icon: 'maven', enable: true } ] } ], }; /////////////////////////////////////////////////////////////////// // css样式 /////////////////////////////////////////////////////////////////// const defaultSheet = ` /* 注意: 为了避免网页style对该工具的影响, 所有样式均进行初始化并加入!important, js中设置style时也要注意将其设置为important, 否则不能生效. */ /* 划词工具条 */ .qs-toolbar { /* 初始化所有style, 避免被网页本身的style影响 */ all: initial !important; position: absolute !important; display: block !important; height: 26px !important; padding: 2px !important; white-space: nowrap !important; border: 1px solid #F5F5F5 !important; box-shadow: 0px 0px 2px #BBB !important; background-color: #FFF !important; z-index: 10000 !important; } .qs-toolbar-icon { all: initial !important; display: inline-block !important; margin: 0px !important; padding: 2px !important; width: 20px !important; height: 20px !important; border: 1px solid #FFF !important; cursor: pointer !important; } .qs-toolbar-icon:hover { border: 1px solid #CCC !important; } /* 快搜主窗口背景层 */ .qs-r025kcjix9vmk1dx2vdxcq45-main-background-layer { all: initial !important; position: fixed !important; display: block !important; top: 0px !important; left: 0px !important; width: 100% !important; height: 100% !important; border: 0px !important; background-color: rgba(144,144,144,0.3) !important; /* 使背景层背后的所有元素虚化 */ backdrop-filter: blur(5px) !important; z-index: 2147483646 !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-background-mascot{ all: initial !important; width:160px!important; position: fixed !important; right:20px!important; bottom:20px!important; text-align:center!important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-background-mascot >img{ width:150px!important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-background-mascot >span{ font-size:12px!important; color:#5e5e5e!important; font-weight:bold!important; display:inline-block!important; } /* 快搜主窗口 */ .qs-mainbox { all: initial !important; position: fixed !important; display: block !important; text-align: center !important; overflow: auto !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; /* 宽度优先展示 */ width: max-content !important; min-width: 500px !important; max-width: 1400px !important; min-height: 75px !important; max-height: 650px !important; padding: 10px !important; border: 1px solid #F5F5F5 !important; box-shadow: 0px 0px 3px #BBB !important; border-radius: 5px !important; background-color: #FFF !important; opacity: 1 !important; z-index: 2147483647 !important; } /* 快搜主窗口搜索框 */ .qs-r025kcjix9vmk1dx2vdxcq45-main-search-outer-box{ position:relative !important; width: 80% !important; min-width: 400px !important; max-width: 800px !important; margin: 5px auto !important; } /* 快搜主窗口搜索框:input */ .qs-r025kcjix9vmk1dx2vdxcq45-main-search-box { all: initial !important; text-align: center !important; width: 100% !important; height:50px !important; padding:0px 15px 0px 15px !important; border: 0px !important; display:flex !important; flex-direction: row!important; align-items: center!important; border: 1px solid #C4C7CE !important; border-radius: 10px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-search-box:hover{ border-color:#4E71F2 !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-search-box-platform-icon{ width: 24px !important; height: 24px !important; overflow: hidden !important; cursor: pointer !important; background-size: 24px 24px; background-repeat: no-repeat !important; display: block !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-search-input { all: initial !important; text-align: left !important; height: 40px !important; padding: 0px 13px !important; font: 17px/20px arial !important; outline: none !important; flex:1!important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-search-box-clear-btn{ width: 30px!important; height: 30px!important; line-height:30px!important; text-align:center !important; overflow: hidden!important; cursor: pointer!important; background: transparent!important; border: none!important; color: #D5D5D5!important; font-size:30px !important; font-weight:700!important; display:none!important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-search-input::selection { color: #FFF !important; background-color: #425d78 !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-search-input::placeholder { color: #DDD !important; opacity: 1 !important; } /* 选择默认搜索弹窗 */ .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-box{ all: initial !important; position: absolute!important; top: 65px!important; left: 0px !important; width: 400px !important; background: #FFF !important; border-radius: 4px !important; box-shadow: 0 5px 10px 0 #d8d7d7 !important; box-shadow: 0 4px 10px rgba(0, 0, 0, .5) !important; transition: all 0.3s !important; -moz-transition: all 0.3s !important; -webkit-transition: all 0.3s !important; -o-transition: all 0.3s !important; z-index: 999 !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-box::before { all: initial !important; content: '' !important; width: 0px !important; height: 0px !important; position: absolute !important; top: -18px !important; border-top: 10px solid transparent !important; border-right: 10px solid transparent !important; border-bottom: 10px solid #fff !important; border-left: 10px solid transparent !important; left: 10px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-items{ all: initial !important; display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-items >li{ all: initial !important; width: calc(25% - 20px) !important; line-height: 24px !important; font-size: 12px !important; padding: 5px 5px 5px 5px !important; margin: 5px !important; background-color: #e6e6e6 !important; color: #333333 !important; cursor: pointer !important; white-space: nowrap !important; overflow: hidden !important; display: block !important; text-align: left !important; vertical-align: middle !important; border-radius: 3px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-items >li:hover{ background-color: #dfdfdf !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-items >li >img{ all: initial !important; display: inline-block !important; vertical-align: middle !important; width: 16px !important; height: 16px !important; margin: 0px 2px 0px 2px !important; border: 0px !important; cursor: pointer !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-items >li >span{ all: initial !important; display: inline-block !important; vertical-align: middle !important; margin-right: 2px !important; font-size: 13px !important; font-weight:bold!important; color: #000 !important; border: 0px !important; cursor: pointer !important; } /* 快搜主窗口常用搜索引擎列表 */ .qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-box { all: initial !important; display: block !important; text-align: center !important; width: 100% !important; height: 38px !important; margin: 15px 0px 5px 0px !important; white-space: nowrap !important; border: 0px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-icon { all: initial !important; display: inline-block !important; width: 28px !important; height: 28px !important; margin: 0px 6px !important; padding: 3px !important; border: 2px solid #FFF !important; cursor: pointer !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-icon:hover { border: 2px solid #CCC !important; } /* 快搜主窗口分类搜索引擎列表 */ .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-box { all: initial !important; display: block !important; text-align: center !important; width: 100% !important; margin-top: 15px !important; padding-top: 5px !important; border: 0px !important; border-top: 1px solid #DDD !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-box { all: initial !important; display: inline-block !important; text-align: left !important; vertical-align: top !important; min-width: 50px !important; max-width: 150px !important; height: 100% !important; margin: 5px 3px !important; border: 0px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-title { all: initial !important; display: block !important; text-align: left !important; margin: 5px 4px !important; font-size: 18px !important; font-weight: 300 !important; color: #777 !important; border: 0px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine { all: initial !important; display: block !important; text-align: left !important; vertical-align: middle !important; height: 26px !important; border: 2px solid #FFF !important; cursor: pointer !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine:hover { border: 2px solid #CCC !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-icon { all: initial !important; display: inline-block !important; vertical-align: middle !important; width: 16px !important; height: 16px !important; margin: 0px 3px 0px 2px !important; border: 0px !important; cursor: pointer !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-name { all: initial !important; display: inline-block !important; vertical-align: middle !important; margin-right: 2px !important; font-size: 13px !important; font-weight: 400 !important; color: #5F5F5F !important; border: 0px !important; cursor: pointer !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-box { all: initial !important; display: block !important; text-align: center !important; width: 100% !important; border: 0px !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-item { all: initial !important; margin: 0px 10px !important; font-size: 9px !important; color: #888 !important; cursor: pointer !important; text-decoration: none !important; } .qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-item:hover { color: #4E71F2 !important; } /* 设置窗口 */ .qs-setting-box { all: initial !important; position: fixed !important; display: block !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; width: fit-content !important; height: fit-content !important; padding: 10px !important; border: 1px solid #F5F5F5 !important; box-shadow: 0px 0px 6px #BBB !important; border-radius: 10px !important; background-color: #FFF !important; opacity: 1 !important; z-index: 40000 !important; } .qs-setting-config-textarea { all: initial !important; display: block !important; width: 800px !important; height: 650px !important; padding: 5px !important; white-space: pre !important; overflow-wrap: normal !important; font: 400 13.3333px Arial !important; border: 1px solid #CCC !important; border-radius: 5px !important; } .qs-setting-config-textarea:focus { border-color: #4E71F2 !important; } .qs-setting-button-bar { all: initial !important; display: block !important; width: 100% !important; text-align: right !important; border: 0px !important; } .qs-setting-button { all: initial !important; display: inline-block !important; width: 60px !important; margin: 10px 0px 5px 20px !important; font-size: 13px !important; color: #555 !important; border: 0px !important; cursor: pointer !important; } .qs-setting-button:hover { color: #4E71F2 !important; } /* 信息提示浮层 */ .qs-info-tips-layer { all: initial !important; position: fixed !important; display: block !important; overflow: hidden !important; bottom: 30px !important; right: 30px !important; width: fit-content !important; height: fit-content !important; padding: 10px !important; font-size: 13px !important; color: #FFF !important; border: 0px !important; border-radius: 3px !important; background-color: rgba(0,0,0,0.7) !important; z-index: 2147483647 !important; } /* 搜索建议浮层 */ .qs-suggestions-layer { all: initial !important; position: fixed !important; display: block !important; overflow: hidden !important; height: fit-content !important; border: 1px solid #F5F5F5 !important; z-index: 2147483647 !important; box-shadow: 0 4px 8px rgba(0, 0, 0, .2)!important; } .qs-suggestion-item, .qs-suggestion-item-selected { all: initial !important; display: block !important; text-align: left !important; vertical-align: middle !important; width: 100% !important; height: 33px !important; line-height: 33px !important; padding-left: 13px !important; font-size: 15px !important; font-weight: 400 !important; color: #555 !important; border: 0px !important; background-color: rgba(255,255,255) !important; } .qs-suggestion-item-selected { background-color: rgba(230,230,230) !important; } .qs-suggestion-item:hover { cursor: pointer !important; background-color: rgba(230,230,230) !important; } `; /////////////////////////////////////////////////////////////////// // 全局变量 /////////////////////////////////////////////////////////////////// const STORAGE_KEY = { conf: 'qs-conf', tipsShowMark: 'qs-tips-mark', tipsDelay: 'qs-tips-delay', introduce: 'qs-introduce', usedDays: 'qs-script-used-days' } var conf = GM_getValue(STORAGE_KEY.conf, defaultConf); var hotkey2Engine = {}; // 自定义快捷键搜索的hotkey到engine的映射表 var qsPageLock = false; // 是否在当前页面锁定快搜所有功能, 锁定之后仅响应解锁快捷键 /////////////////////////////////////////////////////////////////// // 功能函数 /////////////////////////////////////////////////////////////////// function loadingIcon(icon){ if(!icon){ return defaultIcons.default; } if(icon.indexOf("base64:")!=-1){ return icon; } const localIcon = defaultIcons[icon]; return localIcon ? localIcon : "https://static.staticj.top/img/pics/svg/" + icon + ".svg" } function CommonTools(){ // 获取元素style属性, 包括css中的 this.getStyleByElement = function(e, styleProp) { if (window.getComputedStyle) { return document.defaultView.getComputedStyle(e, null).getPropertyValue(styleProp); } else if (e.currentStyle) { return e.currentStyle[styleProp]; } }; // 计算元素在文档(页面)中的绝对位置 this.getElementPosition = function(e){ return { top: e.getBoundingClientRect().top + window.scrollY, // 元素顶部相对于文档顶部距离 bottom: e.getBoundingClientRect().bottom + window.scrollY, // 元素底部相对于文档顶部距离 left: e.getBoundingClientRect().left + window.scrollX, // 元素左边相对于文档左侧距离 right: e.getBoundingClientRect().right + window.scrollX // 元素右边相对于文档左侧距离 }; }; // 获取可视窗口在文档(页面)中的绝对位置 this.getWindowPosition = function(){ return { top: window.scrollY, bottom: window.scrollY + window.innerHeight, left: window.scrollX, right: window.scrollX + window.innerWidth }; }; // 判断元素在文档(页面)中是否可见 this.isVisualOnPage = function(ele){ if (this.getStyleByElement(ele, 'display') == 'none' || this.getStyleByElement(ele, 'visibility') == 'hidden' || this.getStyleByElement(ele, 'opacity') == '0') { return false; } if (this.getStyleByElement(ele, 'position') != 'fixed' && ele.offsetParent == null) { return false; } var elePos = this.getElementPosition(ele); if (elePos.bottom - elePos.top == 0 || elePos.right - elePos.left == 0 || elePos.bottom <= 0 || elePos.right <= 0) { return false; } return true; }; // 获取选中文本 this.getSelection = function(){ return window.getSelection().toString().trim(); }; this.loadSheet = function(sheet, id){ if(!id){ id = "default-"+Math.ceil(Math.random()*100000000); } const css = document.createElement('style'); css.type = "text/css"; css.id = id; css.textContent = sheet; const heads = document.getElementsByTagName('head'); if(heads && heads.length>0){ document.getElementsByTagName('head')[0].appendChild(css); }else{ document.body.insertAdjacentHTML('beforeend', html); } }; this.getPlatform = function(){ const userAgent = navigator.userAgent.toLocaleLowerCase(); let platform = "unknown"; if(userAgent.indexOf("mac")!=-1){ platform = "mac"; }else{ platform = "win"; } return platform; }; /** * @param {Object} time * @param {Object} format * 时间格式化 * DateFormat(new Date(dateCreated), "yyyy-MM-dd hh:mm:ss") */ this.dateFormat = function(time, format) { if(!time){time=new Date();} var o = { "M+": time.getMonth() + 1, //月份 "d+": time.getDate(), //日 "h+": time.getHours(), //小时 "m+": time.getMinutes(), //分 "s+": time.getSeconds(), //秒 "q+": Math.floor((time.getMonth() + 3) / 3), //季度 "S": time.getMilliseconds() //毫秒 }; if(/(y+)/.test(format)){ format = format.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length)); } for(var k in o){ if(new RegExp("(" + k + ")").test(format)){ format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } } return format; }; } /** * * @param {*} conf * 设置相关方法 */ function Setting(commonTools, conf){ this.qsSettingBox = null; this.qsConfigTextarea = null; this.conf = conf; this.createSettingBox=function(){ // 设置窗口container var settingBox = document.createElement('div'); settingBox.id = 'qs-setting-box'; settingBox.className = 'qs-setting-box'; settingBox.style.setProperty('display', 'none', 'important'); document.body.appendChild(settingBox); // 配置文本框 var configTextarea = document.createElement('textarea'); configTextarea.id = 'qs-setting-config-textarea'; configTextarea.className = 'qs-setting-config-textarea'; settingBox.appendChild(configTextarea); // 底部按钮container var buttonBar = document.createElement('div'); buttonBar.id = 'qs-setting-button-bar'; buttonBar.className = 'qs-setting-button-bar'; settingBox.appendChild(buttonBar); // 重置按钮 var resetButton = document.createElement('button'); resetButton.id = 'qs-setting-button-reset'; resetButton.className = 'qs-setting-button'; resetButton.type = 'button'; resetButton.textContent = '重置'; resetButton.onclick = (e)=> { configTextarea.value = JSON.stringify(defaultConf, null, 4); } buttonBar.appendChild(resetButton); // 关闭按钮 var closeButton = document.createElement('button'); closeButton.id = 'qs-setting-button-close'; closeButton.className = 'qs-setting-button'; closeButton.type = 'button'; closeButton.textContent = '取消'; closeButton.onclick = (e)=> { this.hideSettingBox(); } buttonBar.appendChild(closeButton); // 保存按钮 var saveButton = document.createElement('button'); saveButton.id = 'qs-setting-button-save'; saveButton.className = 'qs-setting-button'; saveButton.type = 'button'; saveButton.textContent = '保存'; saveButton.onclick = (e)=> { var newConf = JSON.parse(configTextarea.value); GM_setValue(STORAGE_KEY.conf, newConf); this.hideSettingBox(); // 需用户手动刷新页面重新加载配置使其生效 alert('设置已保存, 刷新页面后生效.'); } buttonBar.appendChild(saveButton); this.qsSettingBox = settingBox; this.qsConfigTextarea = configTextarea; }; // 设置窗口是否处于显示状态 this.isSettingBoxVisual = function(){ return this.qsSettingBox.style.display == 'block'; }; // 显示设置窗口 this.showSettingBox = function(){ ensureQuickSearchAlive(); if (this.isSettingBoxVisual()) { return; } var confStr = JSON.stringify(conf, null, 4); this.qsConfigTextarea.value = confStr; this.qsSettingBox.style.setProperty('display', 'block', 'important'); }; // 隐藏设置窗口 this.hideSettingBox = function() { this.qsSettingBox.style.setProperty('display', 'none', 'important'); }; } /** * 快搜 */ function QuickSearch(commonTools, conf){ // // 主窗口参数, // this.qsBackgroundLayer = null; this.qsMainBox = null; this.qsSearchInput = null; this.qsInputClearBtn = null; // // 搜索建议 // this.qsSuggestionsLayer = null; this.rawInputQuery = null; // 输入框中的原始查询 this.multiEngin###ggestions = []; // 多个搜索引擎的建议, 每个一个子数组 this.suggestionCount = 0; // 多个搜索引擎的实际建议的总数 this.selectedSuggestionIndex = -1; // 用户选中的搜索建议项对应的index this.maxSuggestionCount = 5; // 最多建议个数 this.qsSuggestionItems = []; // 快搜搜索建议所有item元素(不一定都显示) // 快搜主窗口背景层 // // 随快搜主窗口一同显示/隐藏, 铺满整个可视窗口. 其作用主要是: // 1. 想要实现点击快搜主窗口外面就隐藏快搜主窗口, 但如果点击target是页面中的cross-domain iframe的话, // 当前window就不能捕获到该iframe的click事件, 所以覆盖一层作为以便捕获点击事件. // 2. 也可以做背景虚化/遮罩效果. this.createMainBox=function(){ const self = this; const backgroundLayer = document.createElement('div'); backgroundLayer.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-background-layer'; backgroundLayer.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-background-layer'; backgroundLayer.style.setProperty('display', 'none', 'important'); const backgroundMascot = document.createElement('div'); backgroundMascot.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-background-mascot'; const mascot = document.createElement('img'); mascot.src='data:image/gif;base64,R0lGODlhaAFoAfd8AGlpaU1NTe3t7ejo6EVFRUlJSVlZWVJSUmVlZeTk5FVVVeDg4F1dXd7e3j09PUFBQdzc3Nra2ubm5uLi4tDQ0MrKytbW1sjIyM3NzTU1NcTExNjY2DAwMM7Ozra2tsbGxrS0tCkpKbi4uC0tLSUlJcDAwDk5OdLS0rq6usLCwiEhIdTU1LGxsY6OjhwcHBgYGKCgoBUVFaysrJ6enqioqJqamqSkpK+vr6qqqrCwsJycnKKioqampr6+vok7QgMDA5aWlpiYmJCQkIyMjISEhIqKipOTk4iIiIaGhhAQEHBwcHh4eHx8fAwMDJSUlIGBgWxsbHR0dP7+/n9/f3p6en5+fgkJCXZ2dmBgYGNjY3Jycm5ubmQrMRoLDAkEBPz8/P39/fv7+/f39/r6+vPz8/n5+fX19fb29vDw8Pj4+Orq6vLy8vT09O7u7vHx8evr6+/v7zwaHgcGBwAAAP///7y8vC0UFnczOlYlKppCS4A3PqBFTpVASW8wNpI/R0cfIv/mXP/++f/51f/87P/52f/jQf/+9f/86P/98P/2wf/2xf/mVf/sgf/paf/lUf/hOv/4zf/3yf/5xP/kSv/wlf/kRv/xoP/1vf/63f/lTf/vkP/iPP/ujP/oYf/1uf/thf/qtP/sff/64f///P/xpf/4uv/jPv/2sf/0rf/6yv/ref/95P/qbf/7tP/84f/teP/ydP/kQf/gOP/kO//0pf/me//mYP/71P/90v/gP//iOf/qif/oS//1nv/rkf/iOv/iO//jOv/jO//ulv/iTP/rc//xiP/40P/oZf/wnf/0tf/qqf/uif/jRf/75f/lPf/sU//wmf/pWv/1zf/iSf/21f/u1v/yqf/mbf/1qv/83f/xrv/gPf/qfv/82v/0ov/xvf/ytv/ndv/0mf/8zP/79f/ywP/kWP/jUP/ysf/56f/67P/pQv/qg//7nv/wbv/smv/15f/ua//xx//06P/twf/miv/z2v/sbf/wuP/78v/38P/9/P/6qv/tZAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0MzNiNDMwYi0yYmYzLWYxNDktYWIxNy1lMjY3NzllYjAzMWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjI0NTBFMEFFNDIxMTFFQTk3RTFEODgwQUY3REI5NTQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjI0NTBFMDlFNDIxMTFFQTk3RTFEODgwQUY3REI5NTQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NDMzYjQzMGItMmJmMy1mMTQ5LWFiMTctZTI2Nzc5ZWIwMzFlIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjQzM2I0MzBiLTJiZjMtZjE0OS1hYjE3LWUyNjc3OWViMDMxZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAkKAHwALAAAAABoAWgBAAj/APkIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGOyFLRKps2bOHPqVKnJVKZIO4MKHUq0KEFMm379+mS0qdOnUEcmUiqMU9SrWLNqVXiJaqitYMOKLYpU6aJAY9OqXdvSlzBgTNnKnUvXoyRPhurq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fuhER9/4dOylShXnTGMw+0iCo89cxhPVI6CRF85fHkze+U9/5aQYxoMohcgdAyDCb+rZVIJUppkuBxrRTi1YPF1RMLVZVAQuFwuPAy3y+8zLOhcKOwgqGGIwaHyCRUKZIiiZzI8oglLw43SiS31Kjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGap5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumklFZqqWcWtGCACSSowMEBQQhw6U5ENDHHqaieqkINI0lQQhBKHP9AAAEG8HDGqAhFkequqBrQhkdvGPFADLyeyoENaCw0hgADwMFoGQIIsWsTKpCQxK4OJLuRDSoUy6sKAUSBw60DDWADAxy48IIKBBxBwReDwsHCEwwQMMILqXKQQwNkiJEADCGkmoVGAyDg7Q9WyOFtAGHwMUYRLhzMARQgsPGnE916S0ICdHTssQBYpCpDRGr0UAMTCGCBhQIRp+rCAU/Q0EEDGwzR8q4f0FHBDwenGsLIe6KhQM8x5Ozx0VIcgKoLCTgEAss9z6ECDG0g3bEaQjhw7alJNECHCKk2EUIGN++KgKh4kkEAr3LEMIIDUKxg9dEJ4HsqAWUsREEBUZ//qgDHc9NdwckadHyGEiEEMAMEaYDRBgpajMCzzyXgCYDPLZRgwQBjBG41Daky0PBBYLSw9cFWO###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###W4Zorj3BsR1KAIRECCEGgA54d1l5BXCctmq+NEQjPPAkbRGx1Q8oUoMMcFabX06aKQBBOsoC1wRokIIIOfQYtabAkogyydSQAObyQBhn7QE0ZaKua+end1uNxNaGC1GKzw15QLNvVykoAsLGgISUX23pIpB9PkBAhjfGxvyaABVy/Pd5gByg0mSoCSYDUBuXFBBwYYOGUBhVk9aVrNLjoFmPhqgGBKAg2BsoYlmHVmeFaiS2crz4UmoQZnCIoFlGDmJAQACAEXoLcyxsLDxYQDMhDKAIKAWjsFtgKadt8N7BRx94U3Jlr/EFVQymCDjkswAEywwQUmcNDdnWF9GRjZBT3Q2DkwYI0rZ0E7mSOSB2ShBSCIAEsnt7i6eXt5cGiB1fLzlAHIAAtFZQ7TCIAAIjgBBjKAiBRYVoVHHVuACxgo1aES0yU4gM51LDUCjOAQDdjd7mKf1JO9qryWWUCbkiIDr6lgG0BQswZLCIAJlubI4ySBO3pn7dlpBQehLy0ESJ0UG0Za7cIXpA0WYEELsrD4Zza+YpPS3tfKEAEb6LECImiIDhyEBEDftTcVqAEDsh6mMQVeowHwvELUcAIRwAAI+yQMlh/Vz0lFIIegMrNqVOAAVsos3r421CGBMz/hV0QMG8hB/wuYoAQAmN/8dDTmrFTfeEfuLAkfNhTu5gAE79ekq6CclQXI2X7zOKAFDYBAL6FltBUe9scSIxcTTjArYjB/P1AACmAAAEAFREBPM/BCTPAALpAE59FFS4ADKzIQ2HZxW/UmTQdlB0gXkXEDDOhQLLIADRBrCSECVtMEQQAnlvEST5CCLPEBRRUDtGRlqsISInUvPbB0AUIe9sODhhRBAYBgXrYSQmBWJGAASBchEvBWEsBr+8OEK8FUPDIrEycZN6EBPTc7HEgCMEAFPJFxXsgST9YE8DIp8/cxyHRejpdDNviGNSEABrddZHYiKwAUFvAEJjBRVnIBWGACW7BDfHG4EhqwMxwABPMGP3FRPVHhAUfAAA/gABlAAG74iDlBLTzhAleQAllIWG5hAZvVBBggirB4Ej2gYWQkGg4QAAZgAASwM1YQirH4ixeBBv7SfyRwTMB4jMG4JY6EBQ6EjM6IERowBYpXGKvDIAoQPXwYEAAh+QQJCgB4ACxfANEAkQBiAAAH/4B4goOEhYaHiImKi4hhECU8NTAoCYYWNEsEISQkHA8BBghTMpWMpqeoqaqrhwM4ACNWc7OzMTiEQLK0u7xJCh5grMLDxMWCETUKL7y8GWd0dGIjzNS7DjJhxtrb3Hg3AU3VvAbQ0FC7L5wxTXI/1RxRPCvZ3fX2iRoE1VYcBkxFT0QNKBdtBpMaF96scaMGwgkMIoAcSEJNDocnC+5ptLcAQLteAYBY+EKwpMmTBCEwWUYtxpM3G2MWy+GiFwMaCVDq3FkyQZUQ7piRqCGzaCoILT7OahJlAs+nUKNhmAGLWYEGRrMeWhPEQbhdByhEHRs1DQsHvFRQ0MrW27ReOP/Iyh0LAygtFRbaFj2jhBqJHnMDQ4UTxZremAv07VJxE47gx0+F0LIi4PA9CyTQGREAuXNkilmgWe4m4O2sq55T83xURvTobVh2RRmjujbU19rq7DpiuzfPFWJxD3tAS4Hv4ydphCOQV7ipNRhk2CBCK0kD5NjLHaD14obzRGBAMFARVHb280Z4bcn4nRAG4tVcXD+f/Un5OTEMGOkxwfkAIRS9cwJ99N3AUi8ZMFDDAHqd4cF4###xxBEzDEQgfRAEIM4cLnhXFAQ2MHGAXbtYQUUEF6ZYUg7giANDTAJg8RU1IwCm4o0p3YCEASHoQssTGpmBVkUEwLAGjkiaJAb/BDPEsAuQ9izBTBMZPIEicjqYYEBOT21QgQYaSADVCmjUdkFNS6VQTwU+FqCDBguAkd0GH0HBUwIPKBUDCzuJYYBF86VmgWkudMBNGPDN8QBJBEZQJ09MMLOoTifQYoRtFMxowhjbiDCZWCnu4AAWXOoUKS8F7NQGB3PIYWNtOii1wTbnzLJEkk/h6eOed+53nAK09LCNYj/Mg+tTQyp67BS0vKgNsR0cy1MR5bnwzElplIrlj7TS8oCFOgmQghFZEAAFZ6mVAKpJFsTGSxDsFjFCElmIgR0KtACwzQeLPQEnumAIUEELAaBJyxWpAdDqAUWIYMEJHhRBgI/jCKFD/wsIZEDxB/fmy01fvbjAQQYcGMwMAJ4lMONSSu3SBcXiWIcdFdxuUwYCG+6DWmdrkLihHT7c4UXOIwAjGAhXOG###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###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###aBLUJRA1gAFuIQDmkspIFRM0EBfsATAdl/uRhA9cHLMxAEMMAQaEJdodnKSl6F0kF32JosEpHETxUly8AQ2AAAGUAe314eu13BcZqOVOKDi5WkNdAMwZnFRgABYsAQesAArBYDaFwBOgAH+yGhskAWHlaFkAKI1JhOjgAmEIApmSqZoWqaEIAhs2qbH8KZwCgmRMKd0qgh2mgh4ShHKsKd7igp++qfXQAvfQAqWcA0TAxOjEAiKuqiI/zAIznCmasqmcjqnv5IQ8ucAtblqIchM56RuFjCUc9B/RkpkGNZvMYEIZ5FEb3NFhdKqrvqqsBqrrYoOQmMIjwqpaxqnc4qngGoJyRANw6AJwsoMn9ANqlAMrJCsyNAJgNCsi/CsjpAJk1AJfbOqrvo0CPEGyed+M1UCEcpVJzBvNBCCXZWeOSB/U3cDOZE6stqu7vqusuoJo0AK0Uqtqgqv+JqvsBo7B1GLDzBTxJgBIToCqmduCzBVIImCvVkGXGqaMZcTQKSvEjux8SIIrEqxGIuvlUAs/fpiknlpWxChcrCMsYdrNyeRU+B/vUkB29RyPOEJoaAKxTqzNEusnP9ws8NKCTq7s8D6q776s4QaqH/Kp55wCUabp0hrp3KiQ5eTsYVSCNQ6rdIarefQrMzaCMkqs4wwszirs7TAGgXxkxh2eOl0BlSAesAEABxmbgMAgruVAxk6Adt6BRPwM8cqDlrLtcLas6SQDadQtHlKp3CqpocwCI16uIyaqCnBEZiYBClqAzTgWhcAqoVEsGNpbsrJSQYgpCurBC1Qt26kmX4nWbkZcHn3Vt4Jo3XUbKyliQsLkCNbpKoLSCAQVNqkgNB5Bj2QqdCpAZiZS8U0nDCAAOAHoxkqSIX4dMWEARfWlcYLnSwginMQAsrLSAugBBmGACr7vA6XArPJisX/dAZEIJHCxr2cKZsFOQcGsAar9KnwlHPmG3AlAHoGCQSrVAZCIJEBwLvxC21qAAXp2wRQALqMJAEmWl6y27/QZgOJmAQAsFj3i64/kLIKjLkyQLk+p0/fJJ32lroVzGjESKq0mXBjlwUs+sFmZgFuu1umelE0FmvUhsJm9gbgyEkvwASQuE/7OAe4JMNmxsALqkhxVZqU6MNd9r2h6l2ohbAlYMRMBgcmeGA9CV6BWZJOfGIeIL2xBgM8mIUFd8UK9r8FGVA5PFxueYJgXF1kAAQNGKoaEIkJUIBOlcbvJwQNvISzuHmxBgB8xIZqULrbS8cFVVw3GQAP64wIC08v/0ACI/BcjmxPVMBjFHC5PlwGpaigIcCeC2kGAGmA8JQBTICaH7wCRKDF9gYE7CuSAuFPGujJMfAE/2m+FiCfrVxeMGAGqlwQYGABMtACAHAAD8ABKuACL1DMxaygk6QEKMC5SJUAFZADM1AD0iwERyCGm1hbbWADAVDLTZB51ZvLZogGAjDO5Nx7NoBHAQCWwMQBqLQCblC2CdAAK/YBNwAERKAECuAAdhVduLtWAyAC4/RLI9BN4BwSZwAClAtjKpABpWQCwhxatRyAa5ucFRAEUOAAm2qQWSACaVDQoGgDCe3JngxyDEYE6cxafgUC3+XRLoEBQ6AAIxDR5DWERb+4BUXQAjgdBDbABGQGsAwQojDmAMPE0jpRBhuwAwDgAMcYTzZJAgzNZwagBUMAAyxQAQ2AnghBiHMQBSAFeROlAgUwBBRA1EYhzvEsAX+MEV9AUjVHaqYcAw6wBDhwAmhA1nqBltN7wtDUAKTao2Vs13TBAtEIdJUZSVUA2IPhAQa5kbl0BhXABIm4BIg9GAMQggttAiZAfIY92Yehx9GlAjbA2YhBgKzFAS3QZqKNGBMwBUrN1C7wUikwBnAUEAA7'; const letTip = document.createElement("span"); letTip.textContent = commonTools.getPlatform()=="mac" ? '快速敲击2次Control键 - 唤起' : "快速敲击2次Ctrl键 - 唤起"; backgroundMascot.appendChild(mascot); backgroundMascot.appendChild(letTip); backgroundLayer.appendChild(backgroundMascot); document.body.appendChild(backgroundLayer); //快搜主窗口container const mainBox = document.createElement('div'); mainBox.id = 'qs-mainbox'; mainBox.className = 'qs-mainbox'; mainBox.style.setProperty('display', 'none', 'important'); document.body.appendChild(mainBox); //整个搜索顶部搜索区域 const searchOuterBox = document.createElement('div'); searchOuterBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-outer-box'; searchOuterBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-outer-box'; const searchBox = document.createElement('div'); searchBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-box'; searchBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-box'; const platformIcon = document.createElement('div'); platformIcon.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-box-platform-icon'; platformIcon.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-box-platform-icon'; platformIcon.style.opacity = 1; if(conf.defaultEngine){ platformIcon.style.backgroundImage='url('+loadingIcon(conf.defaultEngine.icon)+')'; } const switchSearchEngines = document.createElement('div'); switchSearchEngines.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-box'; switchSearchEngines.style.setProperty('display', 'none', 'important'); const searchEngineItems = document.createElement('ul'); searchEngineItems.className='qs-r025kcjix9vmk1dx2vdxcq45-main-switch-search-engines-items'; switchSearchEngines.appendChild(searchEngineItems); const searchInput = document.createElement('input'); searchInput.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-input'; searchInput.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-input'; searchInput.autocomplete = "off"; if (conf.showPlaceholder) { searchInput.placeholder = `输入关键词,回车开始搜索...`; } const inputClearBtn = document.createElement('div'); inputClearBtn.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-search-box-clear-btn'; inputClearBtn.title = 'Clear input content'; const clearImage = document.createElement('img'); clearImage.src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAf9JREFUWEe1lzGvgjAQx+ng0OTpzhsYX2Qy0be7uvA19DPJJ2H1A0DihHF00F1fwsDAyzWUFGiv14osGtre/e7fu/ZggcNzuVzmTdOEypJ5+/8Fv1VV/cHver2+U80yysSiKL4556pj67Kqqh4UEBTAx/GQzAZiBCjL8icIAimxNWLLhFccx1fdnBGAss9TOe/8Msauy+VS5It8RgBlWW7eDRdZP1KiBzCx7CaOHkQHMEXCUZVTE7MD+LD0I7Y4jnN4KQCw6M/n8+Z2ux1ns1kehmG6Wq3EQtMj58N4FEUH03ypggDAoj+dTvvn87mXDjGjqnMbAIyDCoyy91mWHeu67qpDBzF0DortdrsDphaUJQkAjGAQPs5bsBdzKT0dBBiCHJGRUiJXVHED0CmhSuzoHJYKAOeTb6gEWPJwLti9AIZ7Tsl4UzI65QAY0TmnlKgBwC0HdNkOhm0lipQiHQArNco5oYOA05C19z80H6Tj1ZRwPhACwHYUuxwyQ4gkSX6xwMRRDBMolxG11FSIxWKRbrfb1CQ/NK2k6xiMcs5zk7GhAwmBXVy969imAiajz5i2IWlzYcpO2MSmb8nkbJfLySd6Kb1ca2rL0bL0cSwuHsYe1rb8Q0rQP0zU6Cjdkk0N70+zd0Fsjo05gEUEisA45/yrndf7PId3un3GbP4D4KyAlD6sT3UAAAAASUVORK5CYII='; clearImage.style.width='100%'; inputClearBtn.appendChild(clearImage); searchBox.appendChild(platformIcon); searchBox.appendChild(searchInput); searchBox.appendChild(inputClearBtn); searchOuterBox.appendChild(searchBox); searchOuterBox.appendChild(switchSearchEngines); mainBox.appendChild(searchOuterBox); //生成默认搜索引擎选择项 if (conf.classifiedEngines) { conf.classifiedEngines.find((obj) => obj.ident=='search-engines').engines.forEach((engine, index) => { const li = document.createElement('li'); const icon = document.createElement('img'); icon.src = loadingIcon(engine.icon); const span = document.createElement('span'); span.textContent = engine.name li.appendChild(icon); li.appendChild(span); li.addEventListener('click',(e)=>{ platformIcon.style.backgroundImage='url('+loadingIcon(engine.icon)+')'; conf.defaultEngine = engine; GM_setValue(STORAGE_KEY.conf, conf); }, false); searchEngineItems.appendChild(li); }); } //切换默认搜索引擎 const showOrHideSwitchSearchEngines=()=>{ if(switchSearchEngines.style.display.indexOf('none')!=-1){ switchSearchEngines.style.setProperty('display', 'block', 'important'); }else{ switchSearchEngines.style.setProperty('display', 'none', 'important'); } } platformIcon.addEventListener('click', (e)=>{ showOrHideSwitchSearchEngines(); }); //搜索框事件监听 searchInput.addEventListener('keydown', (e)=> { if (e.keyCode == 13) { // 回车键 openEngineOnClickMainBox(conf.defaultEngine, e); } },false); searchInput.addEventListener('focus',(e)=>{ searchBox.style.setProperty('border-color', '#4E71F2', 'important'); }); searchInput.addEventListener('blur', (e)=>{ searchBox.style.setProperty('border-color', '#C4C7CE', 'important'); }); //清除input内容按钮 inputClearBtn.addEventListener('click',()=>{ searchInput.value=''; this.hideInputClearBtn(); }); // 常用搜索引擎 if (conf.showFrequentEngines) { var frequentBox = document.createElement('div'); frequentBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-box'; frequentBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-box'; mainBox.appendChild(frequentBox); conf.frequentEngines.forEach((engine, index) => { if (!engine.enable) return; // 此处return搭配forEach, 请勿改为其他形式循环 var icon = document.createElement('img'); icon.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-icon-' + index; icon.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-frequent-icon'; icon.src = loadingIcon(engine.icon); icon.addEventListener('click', (e)=>{ openEngineOnClickMainBox(engine, e); }, false); frequentBox.appendChild(icon); }); } //点击外部影藏默认搜索引擎选择项框 mainBox.addEventListener("click",(e)=>{ if(!event.target.closest('#qs-r025kcjix9vmk1dx2vdxcq45-main-search-box-platform-icon')) { switchSearchEngines.style.setProperty('display', 'none', 'important'); } }); // 分类搜索引擎 if (conf.showClassifiedEngines) { var classifiedBox = document.createElement('div'); classifiedBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-box'; classifiedBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-box'; mainBox.appendChild(classifiedBox); conf.classifiedEngines.forEach((family, fIndex) => { if (!family.enable) return; // 此处return搭配forEach, 请勿改为其他形式循环 // 一个分类一列 var familyBox = document.createElement('div'); familyBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-box-' + fIndex; familyBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-box'; classifiedBox.appendChild(familyBox); // 分类标题 var familyTitle = document.createElement('div'); familyTitle.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-title-' + fIndex; familyTitle.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-title'; familyTitle.textContent = family.name; familyBox.appendChild(familyTitle); family.engines.forEach((engine, eIndex) => { if (!engine.enable) return; // 此处return搭配forEach, 请勿改为其他形式循环 // 搜索引擎 var engineBox = document.createElement('div'); engineBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-' + fIndex + '-' + eIndex; engineBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine'; engineBox.addEventListener('click', (e)=> { openEngineOnClickMainBox(engine, e); }, false); familyBox.appendChild(engineBox); // 搜索引擎icon var engineIcon = document.createElement('img'); engineIcon.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-icon-' + fIndex + '-' + eIndex; engineIcon.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-icon'; engineIcon.src = loadingIcon(engine.icon); engineBox.appendChild(engineIcon); // 搜索引擎name var engineName = document.createElement('span'); engineName.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-name-' + fIndex + '-' + eIndex; engineName.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-classified-family-engine-name'; engineName.textContent = engine.name; engineBox.appendChild(engineName); }); }); } // 帮助信息 var helpInfoBox = document.createElement('div'); helpInfoBox.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-box'; helpInfoBox.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-box'; mainBox.appendChild(helpInfoBox); // 主页 var homeLink = document.createElement('a'); homeLink.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-home'; homeLink.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-item'; homeLink.textContent = '主页'; homeLink.href = 'https://github.com/Xanthella/OnestepSearch'; homeLink.target = '_blank'; helpInfoBox.appendChild(homeLink); // 帮助 var helpLink = document.createElement('a'); helpLink.id = 'qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-help'; helpLink.className = 'qs-r025kcjix9vmk1dx2vdxcq45-main-help-info-item'; helpLink.textContent = '帮助'; helpLink.href = 'https://github.com/Xanthella/OnestepSearch/blob/main/README.md'; helpLink.target = '_blank'; helpInfoBox.appendChild(helpLink); this.qsBackgroundLayer = backgroundLayer; this.qsMainBox = mainBox; this.qsSearchInput = searchInput; this.qsInputClearBtn = inputClearBtn; }; // 快搜主窗口是否处于显示状态 this.isMainBoxVisual=function(){ return this.qsMainBox.style.display == 'block'; }; // 显示快搜主窗口. // 可选输入text为没有经过URI编码的明文文本, 该参数一般在iframe发来消息时使用. // 快搜主窗口中搜索框的文本优先级: 参数指定文本 > 网页选中文本 > 搜索框已有文本 > 当前页面搜索词 this.showMainBox = function(text){ ensureQuickSearchAlive(); // 快搜主窗口在iframe中不显示 if (this.isMainBoxVisual() || window.self != window.top) { return; } const {qsSearchInput, qsBackgroundLayer, qsMainBox} = this; // 设置搜索框内容 var query = text; if (!query) { query = commonTools.getSelection(); } if (!query) { query = qsSearchInput.value.trim(); } if (!query) { query = getUrlQuery(); } qsSearchInput.value = query; qsBackgroundLayer.style.setProperty('display', 'block', 'important'); qsMainBox.style.setProperty('display', 'block', 'important'); if(query){ this.showInputClearBtn(); //初始化不执行输入提示词 //this.triggerSuggestions(query); } // 隐藏划词工具条 if (selectionToolbar.isToolbarVisual()) { selectionToolbar.hideToolbar(); } // 选中搜索框文本 qsSearchInput.select(); //延迟处理这样能更加准确的获得焦点 setTimeout(()=>{ qsSearchInput.focus(); },599); }; // 隐藏快搜主窗口 this.hideMainBox=function(){ this.destroySuggestions(); this.qsBackgroundLayer.style.setProperty('display', 'none', 'important'); this.qsMainBox.style.setProperty('display', 'none', 'important'); }; this.showInputClearBtn=function(){ this.qsInputClearBtn.style.setProperty('display','block', 'important'); }; this.hideInputClearBtn=function(){ this.qsInputClearBtn.style.setProperty('display','none', 'important'); }; /** * 以下是搜索建议功能 */ // 创建搜索建议浮层 this.creat###ggestionsLayer=function() { if (this.maxSuggestionCount == 0) { return; } const self = this; const {qsSearchInput, qsInputClearBtn} = this; // 搜索建议浮层 var suggestionsLayer = document.createElement('div'); suggestionsLayer.id = 'qs-suggestions-layer'; suggestionsLayer.className = 'qs-suggestions-layer'; suggestionsLayer.style.setProperty('display', 'none', 'important'); document.body.appendChild(suggestionsLayer); // 搜索建议条目 for (var i = 0; i < this.maxSuggestionCount; i++) { var suggestionItem = document.createElement('div'); suggestionItem.id = 'qs-suggestion-item-' + i; suggestionItem.className = 'qs-suggestion-item'; suggestionItem.addEventListener('click', function (e) { qsSearchInput.value = this.textContent; openEngineOnClickMainBox(conf.defaultEngine, e); }, true); suggestionsLayer.appendChild(suggestionItem); this.qsSuggestionItems.push(suggestionItem); } // 向搜索框添加响应函数 qsSearchInput.addEventListener('input', function (e) { var query = qsSearchInput.value.trim(); if (query) { self.triggerSuggestions(query); self.showInputClearBtn(); } else { self.destroySuggestions(); self.hideInputClearBtn(); } }, true); qsSearchInput.addEventListener('mousedown', function (e) { var query = qsSearchInput.value.trim(); if (query) { self.triggerSuggestions(query); } }, true); qsSearchInput.addEventListener('keydown', function (e) { if (e.code == 'ArrowDown' && self.isSuggestionsLayerVisual()) { e.preventDefault(); self.selectSuggestionItem(self.selectedSuggestionIndex + 1); return; } if (e.code == 'ArrowUp' && self.isSuggestionsLayerVisual()) { e.preventDefault(); self.selectSuggestionItem(self.selectedSuggestionIndex - 1); return; } if (e.code == 'Tab' && self.isSuggestionsLayerVisual()) { e.preventDefault(); if (e.shiftKey) { self.selectSuggestionItem(self.selectedSuggestionIndex - 1); } else { self.selectSuggestionItem(self.selectedSuggestionIndex + 1); } return; } }, true); this.qsSuggestionsLayer = suggestionsLayer; }; // 判断搜索建议浮层是否显示 this.isSuggestionsLayerVisual=function() { return this.qsSuggestionsLayer && this.qsSuggestionsLayer.style.display == 'block'; } // 显示搜索建议浮层 this._showSuggestionsLayer=function() { if (!this.qsSuggestionsLayer || this.isSuggestionsLayerVisual()) { return; } var inputPos = this.qsSearchInput.parentNode.getBoundingClientRect(); var top = inputPos.bottom + 'px'; var left = inputPos.left + 'px'; var width = (inputPos.right - inputPos.left) + 'px'; this.qsSuggestionsLayer.style.setProperty('top', top, 'important'); this.qsSuggestionsLayer.style.setProperty('left', left, 'important'); this.qsSuggestionsLayer.style.setProperty('width', width, 'important'); this.qsSuggestionsLayer.style.setProperty('opacity', 1, 'important'); this.qsSuggestionsLayer.style.setProperty('display', 'block', 'important'); }; // 隐藏搜索建议浮层 this._hid###ggestionsLayer=function() { if (this.qsSuggestionsLayer) { this.qsSuggestionsLayer.style.setProperty('display', 'none', 'important'); } }; // // 请求百度搜索建议 // 油猴脚本的GM_xmlhttpRequest可以直接跨域请求, 不受同源策略限制, 这样就不用通过jQuery来发送jsonp请求了. // this.requestBaiduSuggestions=function(query, index, count) { const self = this; const baiduSuggestionUrl = { 'http:': 'http://suggestion.baidu.com/su?wd=%s&cb=', 'https:': 'https://suggestion.baidu.com/su?wd=%s&cb=', }[window.location.protocol]; var url = baiduSuggestionUrl.replace('%s', encodeURIComponent(query)); GM_xmlhttpRequest({ method: 'GET', url: url, timeout: 3000, onload: response => { if (response.status == 200) { let responseText = response.responseText; responseText = responseText.slice(1, -2); responseText = responseText.replace(/([\w]+)\s*:/g, '"$1":'); self.multiEngin###ggestions[index] = JSON.parse(responseText).s.slice(0, count); self.loadSuggestions(); } else { console.log(`Quick Search: Baidu Suggestions: code ${response.status}`); } } }); }; // 选中搜索建议项 this.selectSuggestionItem=function(newSelectedIndex) { const {qsSearchInput, rawInputQuery, qsSuggestionItems, suggestionCount} = this; if (qsSuggestionItems[this.selectedSuggestionIndex]) { qsSuggestionItems[this.selectedSuggestionIndex].className = 'qs-suggestion-item'; } this.selectedSuggestionIndex = newSelectedIndex; this.selectedSuggestionIndex = this.selectedSuggestionIndex < -1 ? suggestionCount - 1 : this.selectedSuggestionIndex; this.selectedSuggestionIndex = this.selectedSuggestionIndex >= suggestionCount ? -1 : this.selectedSuggestionIndex; if (this.selectedSuggestionIndex == -1) { qsSearchInput.value = rawInputQuery; } else { qsSearchInput.value = qsSuggestionItems[this.selectedSuggestionIndex].textContent; qsSuggestionItems[this.selectedSuggestionIndex].className = 'qs-suggestion-item-selected'; } }; // 触发搜索建议 this.triggerSuggestions=function(query) { this.rawInputQuery = query; if (this.selectedSuggestionIndex != -1) { this.selectSuggestionItem(-1); } this.requestBaiduSuggestions(query, 0, 5); }; // 装载搜索建议 this.loadSuggestions=function(){ // 由于装载是异步延迟的, 若用户已经删光了输入框内容, 则不显示搜索建议 const {qsSearchInput, multiEngin###ggestions, qsSuggestionItems} = this; if (!qsSearchInput.value.trim()) { this.destroySuggestions(); return; } // 多个搜索引擎的建议合并并去重 var allSuggestions = multiEngin###ggestions.flat(1).filter((x, i, a) => a.indexOf(x) == i); this.suggestionCount = allSuggestions.length; allSuggestions.forEach((suggestion, i) => { qsSuggestionItems[i].textContent = suggestion; qsSuggestionItems[i].style.setProperty('display', 'block', 'important'); }); for (var i = allSuggestions.length; i < qsSuggestionItems.length; i++) { qsSuggestionItems[i].style.setProperty('display', 'none', 'important'); } if (!this.isSuggestionsLayerVisual()) { this._showSuggestionsLayer(); } }; // 销毁搜索建议 this.destroySuggestions=function() { this._hid###ggestionsLayer(); this.rawInputQuery = null; this.multiEngin###ggestions = []; this.suggestionCount = 0; this.selectedSuggestionIndex = -1; } } /** * 划词工具条对象 * @param {*} conf */ function SelectionToolbar(commonTools, conf){ this.toolbar = null; this.createToolbar = function(){ // 工具条container var toolbar = document.createElement('div'); toolbar.id = 'qs-toolbar'; toolbar.className = 'qs-toolbar'; toolbar.style.setProperty('display', 'none', 'important'); document.body.appendChild(toolbar); // 常用搜索引擎按钮 conf.frequentEngines.forEach((engine, index) => { if (!engine.enable) return; // 此处return搭配forEach, 请勿改为其他形式循环 var icon = document.createElement('img'); icon.id = 'qs-toolbar-icon-' + index; icon.className = 'qs-toolbar-icon'; icon.src = loadingIcon(engine.icon); icon.addEventListener('click', function (e) { openEngineOnClickToolbar(engine, e); }, false); toolbar.appendChild(icon); }); // 直达网址按钮 var icon = document.createElement('img'); icon.id = 'qs-toolbar-icon-url'; icon.className = 'qs-toolbar-icon'; icon.src = 'data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXABcXFwAXFxcAFxcXE1cXFzIXFxc81xcXN1cXFx0XFxcCVxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXFwAXFxcAFxcXABcX####Fxc51xcXMpcXFyLXFxcsVxcXPFcXFyHXFxcCFxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcAFxcXABcXFwAXFxcWFxcXOxcXFytXFxcGlxcXABcXFwIXFxcfVxcXPRcXFyJXFxcCFxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXFwAXFxcAFxcXFhcXFzsXFxcrVxcXBZcXFwAXFxcAFxcXABcXFwFXFxcfFxcXPRcXFyJXFxcCFxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXABcX####Fxc7FxcXK1cXFwWXFxcAFxcXABcXFwAXFxcAFxcXABcXFwFXFxcfFxcXPRcXFyJXFxcCFxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcUVxcXOhcXFytXFxcFlxcXABcXFwAXFxcAFxcXABcXFwAXFxcAFxcXABcXFwFXFxcfFxcXPRcXFyJXFxcCFxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXFzQXFxcxlxcXBlcXFwAXFxcAFxcXABcXFwCXFxcFVxcXARcXFwAXFxcAFxcXABcXFwFXFxce1xcXPRcXFyKXFxcCFxcXABcXFwAXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXPtcXFyAXFxcAFxcXABcXFwAXFxcAFxcXBpcXFzAXFxcelxcXAVcXFwAXFxcAFxcXABcXFwFXFxce1xcXPRcXFyKXFxcCVxcXABcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxc6lxcXKNcXFwDXFxcAFxcXABcXFwAXFxcB1xcXIpcXFz0XFxce1xcXARcXFwAXFxcAFxcXABcXFwFXFxce1xcXPRcXFx9XFxcAlxcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXFyGXFxc8VxcXGxcXFwBXFxcAFxcXABcXFwAXFxcCVxcXIpcXFz0XFxce1xcXARcXFwAXFxcAFxcXABcXFwEXFxcj1xcXOZcXFwpXFxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXA9cXFyYXFxc8lxcXGxcXFwCXFxcAFxcXABcXFwAXFxcCFxcXIpcXFz0XFxce1xcXAVcXFwAXFxcAFxcXABcXFw8XFxc8FxcXE1cXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcAFxcXA1cXFyZX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####FxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXABcXFwAXFxcAFxcXA1cXFyXXFxc8lxcXG5cXFwCXFxcAFxcXABcXFwAXFxcF1xcXK5cXFzsXFxcV1xcXABcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXABcXFwAXFxcAFxcXA1cXFyXXFxc8lxcXG9cXFwEXFxcAFxcXBlcXFyuXFxc61xcXFdcXFwAXFxcAFxcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXABcXFwAXFxcAFxcXA1cXFyVXFxc8VxcXKZcXFyCXFxcyFxcXOhcXFxWXFxcAFxcXABcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXABcXFwAXFxcAFxcXA5cXFyDXFxc51xcXPlcXFzNXFxcT1xcXABcXFwAXFxcAAAAAAAAAAAAwAP//4AB//8AAP//AAB//wAAP/8AAB//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAAPwAAAB+AAAAPwAAAB+AAAAPwAAAB+AAAAPwAAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/+AAA//wAAP/+AAD//wAA//+AAf//wAM='; icon.addEventListener('click', function (e) { openUrl(getUrl().url, e); }, false); toolbar.appendChild(icon); // 更多按钮 var icon = document.createElement('img'); icon.id = 'qs-toolbar-icon-more'; icon.className = 'qs-toolbar-icon'; icon.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAABYmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgIHRpZmY6T3JpZW50YXRpb249IjYiLz4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz7UGE7IAAACClBMVEX///9VYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBVYIBzg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79zg79VYIBzg79VYIBzg79zg79VYIBzg79zg79zg79VYIBVYIBVYIBzg79VYIBVYIBzg79VYIBVYIBzg79z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'; icon.addEventListener('click', function (e) { quickSearch.showMainBox(); selectionToolbar.hideToolbar(); }, false); toolbar.appendChild(icon); this.toolbar = toolbar; }; // 划词工具条是否处于显示状态 this.isToolbarVisual = function(){ return this.toolbar && this.toolbar.style.display == 'block'; }; this.showToolbar = function(event){ ensureQuickSearchAlive(); if (this.isToolbarVisual()) { return; } const toolbar = this.toolbar; toolbar.style.setProperty('top', '-10000px', 'important'); toolbar.style.setProperty('left', '-10000px', 'important'); toolbar.style.setProperty('display', 'block', 'important'); var toolbarClientRect = toolbar.getBoundingClientRect(); var toolbarWidth = toolbarClientRect.right - toolbarClientRect.left; var toolbarHeight = toolbarClientRect.bottom - toolbarClientRect.top; var toolbarNewTop = event.pageY + 15; var toolbarNewLeft = event.pageX - (toolbarWidth / 2); var windowPos = commonTools.getWindowPosition(); if (toolbarNewTop + toolbarHeight > windowPos.bottom) { toolbarNewTop = event.pageY - toolbarHeight - 15; } if (toolbarNewLeft < windowPos.left) { toolbarNewLeft = windowPos.left; } else if (toolbarNewLeft + toolbarWidth > windowPos.right) { toolbarNewLeft = windowPos.right - toolbarWidth; } toolbar.style.setProperty('top', toolbarNewTop + 'px', 'important'); toolbar.style.setProperty('left', toolbarNewLeft + 'px', 'important'); }; // 隐藏划词工具条 this.hideToolbar = function(){ if (this.toolbar) { this.toolbar.style.setProperty('display', 'none', 'important'); } } } /** * @param {*} commonTools * 右下提示tips */ function InfoTips(commonTools){ this.qsInfoTipsLayer = null; this.idOfSettimeout = null; // 创建信息提示浮层 this.createInfoTipsLayer = function(){ var infoTipsLayer = document.createElement('div'); infoTipsLayer.id = 'qs-info-tips-layer'; infoTipsLayer.className = 'qs-info-tips-layer'; infoTipsLayer.style.setProperty('display', 'none', 'important'); document.body.appendChild(infoTipsLayer); this.qsInfoTipsLayer = infoTipsLayer; }; // 显示信息提示浮层 this.showInfoTipsLayer = function(info, delay=2000){ this.qsInfoTipsLayer.textContent = 'Onestep: ' + info; this.qsInfoTipsLayer.style.setProperty('display', 'block', 'important'); if (this.idOfSettimeout) { clearTimeout(this.idOfSettimeout); } this.idOfSettimeout = setTimeout(()=>{ this.qsInfoTipsLayer.style.setProperty('display', 'none', 'important'); }, delay); } } // 初始化需要的对象 ps:只初始化一次 const commonTools = new CommonTools(conf); const infoTips = new InfoTips(commonTools); const selectionToolbar = new SelectionToolbar(commonTools, conf); const setting = new Setting(commonTools, conf); const quickSearch = new QuickSearch(commonTools, conf); // 获取当前页面匹配的 搜索引擎 及 其在同类别的搜索引擎列表中的索引 及 同类别的搜索引擎列表. // // TODO 目前只是简单地匹配域名, 待完善. function getMatchedEngineInfo() { var hostname = window.location.hostname; hostname = hostname.replace(/^(www\.)/, ''); // 因为想要在循环中返回最终结果, 因此不能使用forEach语法 for (var classEngines of conf.classifiedEngines) { for (var i = 0; i < classEngines.engines.length; i++) { var engine = classEngines.engines[i]; var engineHostname = new URL(engine.url).hostname; engineHostname = engineHostname.replace(/^(www\.)/, ''); if (hostname == engineHostname) { return { engine: engine, index: i, classEngines: classEngines }; } } } return null; } // 获取搜索引擎url中query的key function getUrlQueryKey(engine) { var params = new URL(engine.url).searchParams; for (var param of params) { if (param[1].includes('%s')) { return param[0]; } } return null; } // 移除url中的domain(protocol+host) function removeUrlDomain(url) { var u = new URL(url); var domain = `${u.protocol}//${u.host}`; return url.substring(domain.length); } // 获取当前页面url中的搜索词. // 返回值为经过URI解码的明文文本. // // 如果当前页面在配置的搜索引擎列表中, 尝试从url中解析参数, 分为engine.url中含有问号(?)和不含问号(?)两种情况. // 如果没有解析到或者当前页面不在配置的搜索引擎列表中, 尝试获取文本(纯数字除外)在url中完整出现的input/textarea的值. // 如果还是没有, 则认为当前页面url中没有搜索词. function getUrlQuery() { var urlTail = removeUrlDomain(window.location.href); var engineInfo = getMatchedEngineInfo(); var engine = engineInfo ? engineInfo.engine : null; // 尝试利用配置的搜索引擎信息从url中获取搜索词 if (engine && engine.url.includes('%s')) { if (engine.url.includes('?')) { // engine.url中含有问号(?) var queryKey = getUrlQueryKey(engine); var params = new URLSearchParams(window.location.search); var query = params.get(queryKey); if (query) { console.log(`Quick Search: get query by URL-KV, engine is ${engine.url}`); return query; // URLSearchParams已经decode过了 } } else { // engine.url中没有问号(?) var parts = removeUrlDomain(engine.url).split('%s'); if (parts.length == 2 && urlTail.startsWith(parts[0]) && urlTail.endsWith(parts[1])) { var query = urlTail.substring(parts[0].length, urlTail.length - parts[1].length); var index = query.search(/[\/\?\=\&\#]/); // 是否含有 / ? = & # if (index != -1) { query = query.substring(0, index); } if (query) { console.log(`Quick Search: get query by URL-PART, engine is ${engine.url}`); return decodeURIComponent(query); } } } } // 尝试获取文本(纯数字除外)在url中完整出现的input/textarea的值 var eles = document.querySelectorAll('input, textarea'); for (var ele of eles) { if (commonTools.isVisualOnPage(ele) && !quickSearch.qsMainBox.contains(ele) && !setting.qsSettingBox.contains(ele)) { var eleValue = ele.value.trim(); if (eleValue && !/^\d+$/.test(eleValue)) { var encodedEleValue = encodeURIComponent(eleValue); var index = urlTail.indexOf(encodedEleValue); if (index != -1) { var leftChar = urlTail[index - 1]; var rightChar = urlTail[index + encodedEleValue.length]; if ((!leftChar || /[\/\=\#]/.test(leftChar)) && (!rightChar || /[\/\?\&\#]/.test(rightChar))) { console.log(`Quick Search: get query by ${ele.tagName}[id='${ele.id}'], engine is ${engine ? engine.url : 'NULL'}`); return eleValue; } } } } } console.log(`Quick Search: query is NULL, engine is ${engine ? engine.url : 'NULL'}`); return null; } // 判断是否允许工具条 function isAllowToolbar(event) { var target = event.target; if (!conf.showToolbar || qsPageLock) { return false; } if (!conf.enableOnInput && (target.tagName == 'INPUT' || target.tagName == 'TEXTAREA')) { return false; } if (quickSearch.qsMainBox && quickSearch.qsMainBox.contains(target) || setting.qsSettingBox && setting.qsSettingBox.contains(target)) { return false; } return true; } // 判断是否允许响应当前按键 // 默认只响应: 单字符的Escape / Alt+单字符 / Cmd/Ctrl+Alt+单字符 function isAllowHotkey(event) { var target = event.target; if (!qsPageLock && event.code == 'Escape') { return true; } if (!event.altKey) { return false; } if (event.shiftKey) { return false; } if (qsPageLock && event.code != 'KeyL') { return false; } if ((target.tagName == 'INPUT' || target.tagName == 'TEXTAREA') && !conf.enableOnInput) { return false; } if (setting.qsSettingBox && setting.qsSettingBox.contains(target)) { return false; } return true; } // 获取搜索引擎主页url function getEngineHome(engine) { if (engine.home) { return engine.home; } else { var url = new URL(engine.url); return `${url.protocol}//${url.hostname}/`; } } // 获取直达的网址. 网址优先级: 搜索框已有网址(若快搜主窗口可见) > 网页中选中网址 // 返回 网址 及 网址来源 function getUrl() { var url, source; if (quickSearch.isMainBoxVisual()) { url = quickSearch.qsSearchInput.value.trim(); source = 'mainbox'; } else { url = commonTools.getSelection(); source = 'selection'; } // 补全网址 if (url && !url.includes('://')) { var dotCount = (url.match(/\./g) || []).length; if (dotCount == 0) { url = 'www.' + url + '.com'; } else if (dotCount == 1) { url = 'www.' + url; } url = 'http://' + url; } if (!url) { source = null; } return { url: url, source: source }; } // 获取搜索词. 文本优先级: 搜索框已有文本(若快搜主窗口可见) > 网页中选中文本 > 当前页面搜索词 // 返回 搜索词 及 搜索词来源 function getQuery() { var query, source; if (quickSearch.isMainBoxVisual()) { query = quickSearch.qsSearchInput.value.trim(); source = 'mainbox'; } else { query = commonTools.getSelection(); source = 'selection'; if (!query) { query = getUrlQuery(); source = 'url'; } } if (!query) { source = null; } return { query: query, source: source }; } // 打开url. // 当按下Cmd(Mac系统)/Ctrl(Windows/Linux系统), 则后台打开url. function openUrl(url, event) { // console.log(`Quick Search: open url, url is ${url}`); if (!url) return; if (event.metaKey || event.ctrlKey) { GM_openInTab(url, true); } else { GM_openInTab(url, false); } } // 打开engine搜索结果或engine主页. function openEngine(engine, query, event) { // console.log(`Quick Search: open engine, engine is ${engine.url}, query is ${query}`); if (!engine) return; if (query) { var url = engine.url.replace('%s', encodeURIComponent(query)); openUrl(url, event); } else { openUrl(getEngineHome(engine), event); } } // 快捷键搜索. // 同样, 当query为空时打开引擎主页, 否则正常搜索. function openEngineOnKey(engine, query, event) { openEngine(engine, query, event); } // 点击搜索引擎. // 当按下Alt, 则忽略查询词打开引擎主页, 否则正常搜索. function openEngineOnClick(engine, query, event) { if (event.altKey) { openEngine(engine, null, event); } else { openEngine(engine, query, event); } } // 点击划词工具条搜索引擎. function openEngineOnClickToolbar(engine, event) { var query = commonTools.getSelection(); openEngineOnClick(engine, query, event); } // 点击快搜主窗口搜索引擎. function openEngineOnClickMainBox(engine, event) { var query = quickSearch.qsSearchInput.value.trim(); openEngineOnClick(engine, query, event); } // 切换快搜page lock状态 function toggleQuickSearchPageLock() { qsPageLock = qsPageLock ? false : true; if (qsPageLock) { selectionToolbar.hideToolbar(); quickSearch.hideMainBox(); infoTips.showInfoTipsLayer('已禁用(🔒)'); } else { infoTips.showInfoTipsLayer('已启用(🚀)'); } } /////////////////////////////////////////////////////////////////// // 元素创建 与 元素事件响应 /////////////////////////////////////////////////////////////////// // 初始化热键映射表 function initHotkeyEngineMapping() { conf.hotkeyEngines.forEach(engine => { if (!engine.enable) return; // 此处return搭配forEach, 请勿改为其他形式循环 engine.hotkeys.forEach(key => { hotkey2Engine[key] = engine; }); }); } // // 创建以上所有东东 // function initQuickSearch() { commonTools.loadSheet(defaultSheet,"qs-css"); initHotkeyEngineMapping(); if (conf.showToolbar) { selectionToolbar.createToolbar(); } quickSearch.createMainBox(); setting.createSettingBox(); infoTips.createInfoTipsLayer(); quickSearch.creat###ggestionsLayer(); } // 百度等网页会在不刷新页面的情况下改变网页内容, 导致quick search除了js脚本之外的东东全部没了. // 此函数用于确保quick search处于可用状态, 需在toolbar或mainbox等窗口每次显示时调用. function ensureQuickSearchAlive() { var css = document.querySelector("#qs-css"); var mainbox = document.querySelector("#qs-mainbox"); if (!css || !mainbox) { initQuickSearch(); } } initQuickSearch(); /////////////////////////////////////////////////////////////////// // 全局事件响应 // // 我们将全局事件绑定在捕获阶段执行, 避免事件响应被网页自带的脚本拦截掉. /////////////////////////////////////////////////////////////////// // // top window和iframe共用的事件处理逻辑 // window.addEventListener('mousedown', function (e) { var target = e.target; // 隐藏工具条 if (selectionToolbar.isToolbarVisual() && !selectionToolbar.toolbar.contains(target)) { selectionToolbar.hideToolbar(); } }, true); window.addEventListener('mouseup', function (e) { var target = e.target; // 显示/隐藏工具条 if (isAllowToolbar(e)) { var selection = commonTools.getSelection(); if (selection && !selectionToolbar.isToolbarVisual()) { selectionToolbar.showToolbar(e); } if (!selection && selectionToolbar.isToolbarVisual()) { selectionToolbar.hideToolbar(); } } // 划词时自动复制文本到剪贴板 if (conf.autoCopyToClipboard && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA' && !quickSearch.qsMainBox.contains(target) && !setting.qsSettingBox.contains(target)) { var selection = commonTools.getSelection(); if (selection) { GM_setClipboard(selection, 'text/plain'); } } }, true); // 有时候selectionchange发生在mouseup之后, 导致没有selection时toolbar依然显示. // 故再添加selectionchange事件以隐藏toolbar. // 由于在鼠标划词拖动过程中会不停触发selectionchange事件, 所以最好不要以此事件来显示/调整toolbar位置. document.addEventListener('selectionchange', function (e) { var selection = commonTools.getSelection(); if (!selection && selectionToolbar.isToolbarVisual()) { selectionToolbar.hideToolbar(); } }, true); // // 只在top window中使用的事件处理逻辑 // 只在顶层窗口执行该方法 // if (window.self == window.top) { //隐藏窗口 window.addEventListener('mousedown', function (e) { var target = e.target; // 隐藏快搜主窗口 if (quickSearch.isMainBoxVisual() && !setting.isSettingBoxVisual() && !quickSearch.qsMainBox.contains(target) && !quickSearch.qsSuggestionsLayer.contains(target)) { quickSearch.hideMainBox(); } // 隐藏搜索建议浮层 if (quickSearch.isSuggestionsLayerVisual() && !quickSearch.qsSuggestionsLayer.contains(target) && !quickSearch.qsSearchInput.contains(target)) { quickSearch.destroySuggestions(); } }, true); function showOrHideMainBox(){ if (!quickSearch.isMainBoxVisual()) { quickSearch.showMainBox(); } else { quickSearch.hideMainBox(); } } // 双击触发 let altPressedCount = 0; let timeoutId=null; let qsKeyComplete = false; window.addEventListener('keydown', function (event) { if(!qsPageLock && ( (event.code==='AltLeft' || event.code==='AltRight') || (event.code==='ControlLeft' || event.code==='ControlRight') )){ altPressedCount ++; if (altPressedCount === 1) { timeoutId = setTimeout(() => { // 第一次按下,设置超时检测第二次按下 altPressedCount = 0; }, 500); } else if (altPressedCount === 2) { if(timeoutId != null){ clearTimeout(timeoutId); timeoutId = null; } altPressedCount = 0; event.preventDefault(); showOrHideMainBox(); } }else{ altPressedCount = 0; if(timeoutId != null){ clearTimeout(timeoutId); timeoutId = null; } } }, true); //油猴菜单触发 GM_registerMenuCommand("打开快搜窗口",function(){ showOrHideMainBox(); }); //组合键触发 window.addEventListener('keydown', function (e) { if (!isAllowHotkey(e)) { return; } // Esc键, 隐藏快搜主窗口 if (e.code == 'Escape') { if (quickSearch.isMainBoxVisual() && !setting.isSettingBoxVisual()) { quickSearch.hideMainBox(); } return; } // Alt+L键, 锁定/解锁快搜所有功能. if (e.code == 'KeyL') { e.preventDefault(); toggleQuickSearchPageLock(); return; } if (e.code == 'KeyF') { e.preventDefault(); showOrHideMainBox(); return; } // Alt+D键, 网址直达. 网址优先级: 搜索框已有网址(若快搜主窗口可见) > 网页中选中网址 if (e.code == 'KeyD') { e.preventDefault(); openUrl(getUrl().url, e); return; } // Alt+自定义快捷键搜索. 文本优先级: 搜索框已有文本(若快搜主窗口可见) > 网页中选中文本 > 当前页面搜索词 if (hotkey2Engine[e.code]) { e.preventDefault(); var engine = hotkey2Engine[e.code]; var query = getQuery(); openEngineOnKey(engine, query.query, e); return; } }, true); } /** * 提醒10天,每天提醒20次 * @param {*} commonTools */ function OneStapRemind(commonTools){ this.isShow=function(){ const usedDays = GM_getValue(STORAGE_KEY.usedDays, 0); const tipsShowMark = GM_getValue(STORAGE_KEY.tipsShowMark, null); const tipsDelay = GM_getValue(STORAGE_KEY.tipsDelay, null); const currentDay = commonTools.dateFormat(null, "yyyy-MM-dd"); const currentMs = (new Date()).getTime(); const timesMax = 20; const usedDaysMax = 10; let isShow = false, day = currentDay, times=1; if(tipsDelay && (currentMs-tipsDelay)<1*60*1000){ //间隔时间太短不显示 isShow = false; }else{ if(usedDays >= usedDaysMax){ //提示超过10天了不显示 isShow = false; }else{ if(tipsShowMark){ //以下为正常判断 const marks = tipsShowMark.split("@"); day = marks[0]; times = parseInt(marks[1]); if(currentDay != day){ isShow = true; times = 1; day = currentDay; GM_setValue(STORAGE_KEY.usedDays, usedDaysMax+1); }else{ if(times >= timesMax){ isShow = false; }else{ times += 1; isShow = true; } } }else{ isShow = true; } } } if(isShow){ GM_setValue(STORAGE_KEY.tipsShowMark, day+"@"+times); GM_setValue(STORAGE_KEY.tipsDelay, currentMs); } return isShow; }; this.show=function(){ if(this.isShow()){ if(commonTools.getPlatform() == "mac"){ infoTips.showInfoTipsLayer("【快速敲击2次Control键】可唤起快搜窗口!", 5000); }else{ infoTips.showInfoTipsLayer("【快速敲击2次Ctrl键】可唤起快搜窗口!", 5000); } } }; } (new OneStapRemind(commonTools)).show(); })();