// ==UserScript==
// @name selection-search
// @version 10000
// @author logan
// @description 划词搜索
// @homepage https://github.com/loganoxo/selection-search
// @homepageURL https://github.com/loganoxo/selection-search
// @supportURL https://github.com/loganoxo/selection-search/issues
// @icon data:image/png;base64,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
// @match *://*/*
// @exclude *://192.168.*.*
// @exclude *://10.*.*.*
// @exclude *://172.16.*.*
// @exclude *://127.0.0.*
// @exclude *://localhost
// @exclude *://*.local
// @grant GM.openInTab
// @grant GM.setClipboard
// @grant GM.getValue
// @grant GM.setValue
// @grant GM.xmlHttpRequest
// @run-at document-end
// @license MIT
// @namespace https://gf.qytechs.cn/users/1317201
// ==/UserScript==
(async 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,
};
};
// this.callSiteInformationNoHomepage = function (_enable = true) {
// return {
// name: _name,
// url: _url,
// icon: _icon,
// enable: _enable,
// };
// };
}
// 百度
const Baidu_ICO = "data:image/png;base64,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";
const Baidu = new SiteInfo(
"百度",
"https://www.baidu.com/s?wd=%s&ie=utf-8",
"https://www.baidu.com/",
Baidu_ICO,
);
// 谷歌
const Google_ICO = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACDVBMVEUAAAD+/v7+/v79/f39/f39/f39/f39/f3+/v7+/v79/f39/f39/f39/f3+/v7////9/f39/f39/f39/f3+/v7+/v79/f39/f3+/v7+/v79/f39/f3////+/v79/f3////9/f3+/v7+/v79/f39/f39/f3+/v7////9/f3+/v79/f39/f39/f3////9/f3////+/v7////85uT1pZ7wdGrsVUjqRjjqRTfsU0bvcmj1oZr85OL85+XxgXjqRDbqQzXxf3b3urXrSz7rTD/4v7r1p6DyioHuZVn0m5P3tK73ta/0m5TuZlryjob//v7rSj3tXFD5zMj5y8fsWEzzlIz0kG3vbGH+8vL+9fT+9t37uQfxdyD98O7934b7vAX1kxXrSTT3uLP8zUb5riH/+/v7whz801lChfS/1fv7vQf93H2lxfqfwfn80liqyPr8zkfkwi76/fve6v3B1/v934iztSE8qFCw3byox/rn8P7+9t/2vAmGsDM0qFNGsGLs9+/z9/5UkPVgmfaPx4JcuXXw+fL6/P93p/epyPrm9Oo+rFtMsmfC5cza7+BjsahChfH2+f634MJUtm6Nzp+q2rer27iV0qVkvHs1qFQ3oHdBiePD2Pyj2LE1pWA+jsq54cQ+rFw3qVab0rHn9et7xo82qVRnvn7X7t2h169swIJJsWU4qlZGsGNlvX3Y7t5rzgcKAAAAMXRSTlMADlqcy+367Fknn/f2nSUKjfz7iwkm1dIkMuvqMAuKD/UNV5nI+VYMmiOH09AI6CIvZ7+SkQAAAAFiS0dEDxi6ANkAAAAHdElNRQfmCBALMiy/XZkSAAAB7klEQVQ4y2NggANGJmYWVjY2dhZmDkYGTMDJxW0IBzy8fGjS/AKChihASFgEWV5UzBADiEsg5CWlwEJGxiamZuYWllbWYK60DFw/WN7G1s4eCuwcbMAqoGbIgs13dLJHAs4uYFsg7hAAsV3tUYEb2BY5sP9A7neECLt7eHp5+wAZvn4Qv4As4QI5zx8kHRAIcX9QcAjMK8wMDPKg8AkFyYeFw4Qj4H5VUGRgAlKRUdH29qYxhliAEgMzkIyNi4tPSMQmb6jMwAIkk+Li4pJTsCpQYWAFkqlABWlQkXQEyAAFFgMbkMwEKsjCVJAN5KriU5ADVsAOtSIXU0Ee2AqQI/OBCgoKkd1WBFJQDHYkyJslcXGlZeXICipACirB3uQAklXVNbW1dfUI+YZGoHwTiKXGwMgDpJprgaClFSbf1g4yoAMU1OoMDLxAurMLpKK7ByLf29cPlG+cAGRqAGOTTwjImFgLBpMmT5k6bfqM2pmz0tNnA4XZNEEJQhika04tCpg7DxQIhlqQJK8NYs9fgKxg4SKQmI4uJFFKSIN4i5cshcsvWw4S0dOHJWsZsArDzhUrV61euGbttHVgrp4BImNIiGNGtI4+ctYSkRNClWbT0kXLnRLMCghpBQ1NLPlbUUlZRVpVVVpFWU0dIQoAIFvbhdFCbusAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDgtMTZUMTE6NTA6NDQrMDA6MDC+ka4IAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTA4LTE2VDExOjUwOjQ0KzAwOjAwz8wWtAAAAABJRU5ErkJggg==";
const Google = new SiteInfo(
"谷歌",
"https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8",
"https://www.google.com/",
Google_ICO,
);
// 必应
const Bing_ICO = "data:image/png;base64,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";
const Bing = new SiteInfo(
"必应",
"https://cn.bing.com/search?q=%s",
"https://cn.bing.com/",
Bing_ICO,
);
// github
const GitHub_ICO = "data:image/png;base64,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";
const GitHub = new SiteInfo(
"GitHub",
"https://github.com/search?q=%s",
"https://github.com/",
GitHub_ICO,
);
// 哔哩哔哩
const Bilibili_ICO = "data:image/png;base64,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";
const Bilibili = new SiteInfo(
"哔哩哔哩",
"https://search.bilibili.com/all?keyword=%s",
"https://www.bilibili.com/",
Bilibili_ICO,
);
//youtube
const YOUTUBE_ICO =
"data:image/png;base64,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";
const YOUTUBE = new SiteInfo(
"YOUTUBE",
"https://www.youtube.com/results?search_query=%s",
"https://www.youtube.com/",
YOUTUBE_ICO);
//V2EX
const V2EX_ICO =
"data:image/png;base64,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";
const V2EX = new SiteInfo(
"V2EX",
"https://www.google.com/search?q=site:v2ex.com/t%20%s",
"https://www.v2ex.com/",
V2EX_ICO);
// 直达
const ZHIDA_ICO =
"data:image/png;base64,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";
const Zhida = new SiteInfo("直达", "%s", "https://www.baidu.com/", ZHIDA_ICO);
//复制
const FUZHI_ICO =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAABXNJREFUeF7tnQGSFCEMRdmTqSdbPZl6Mi2s6dqdcXdC8tPkQ/+ustxyCZD8R6CBGV+anktH4OXS3sv5JgAuDoEAEAAXj8DF3VcGEAAXj8DF3VcGEABUEfjaWnttrfW/9fwfgR+3f/rVWut/4IctA/yBPbpOBR2ADgQEAhMA32+j/zoS5njaIeixCz1MAGj0hyT8ZxSGQADEg85m+S0yHTAB8FOLP4ipvhboELgeJgD6yr9DoCceAXcWYALgcFuLwTgA7rUAIwBx9/e2HNkjcU8DAmAtaKxpUgCspWeot9brsmtQuwqHuiuj7AgIgOyILlafAFhMsOzuCoDsiC5WnwBYTLDs7tICcLyndod1nv+x7Bnn+XQAjGxQZI+CHeqLnudTAaBtWxxF7/YtDQASHxf/qMEDAQUAEj9P/KOm0ZM8CgCsTuSHZ/8aR/fxrdi7dnddhW8aaPSfB+NIFhAA58W/vOaRtUA5ANbVrejrTXn0T+7AyOvyyDRQDoDVgZE0dnKsaavPOM+34u+a1l2Fb2FN7QCtVOd1DI0fan/nmQA4T+jPakYFRO0FwHzN71pEBUTtBYAAeIuApoD5NKAjGLVXBpivuaaA4phTNY+OYNReGaAYB1RA1F4ACAAtAisZQEcwaq8MUKl+aw0VELWnBGDkoKRYt7vmR07ttBPoUMyi2lHV1KKRgy/LV2tvBrWnywArXzAZOb59JBIVELWnA8ByaOqQDjRmjVgBYARVANwHyALKipdlT5cBrBtGgUE5zSSyGEQFRO3pALBuyUxTM9CQa7Td6kcFRO3pADg6tNJiELn3iAqI2tMCEBiAS5qgAqL2AqAYG1RA1F4ACIC3CFQsYorjX948OoJRe2WAYgRQAVF7ASAANAVUMoCOYNReGaBSfd0HKI4+QfPoCEbtlQGKIUAFRO0FgADQIrCSAXQEo/aUGUB3AscH5ZYAWE5VjthnbetO4AfR8W4vr3QM/Oiu7gQmALDq6D9c9wJv+WvVh9rTrQEsh1jTvwD4RBmL4Ecz3Qm8j4gVP2vAWPZ0GUB3Ai8OwOH+SotB3Ql8MjG7UhD7BH9C/9AUjtrTTQEnxJi6SlRA1F4AFOOBCojaCwABML7v/FGsUgksFqOieTR+qL0yQIXq79pEBUTtBYAA0BRQyQA6glF7ZYBK9XUptDj6BM2jIxi1VwYohgAVELWnB+Ds/3e47+NXPqiAqD0lALPvBHYIfrfW+gHU7AcVELWnA6DyODhypw8FBhUQtacDoPIYOHKnTwAYEfAeB1tEowG37L39teqzfm/5a/UHtafLANVXwqyAW4J6f48KiNrTAVA5BUS+588r+GN5VEDUng6A3qGKLFAx/3dfUQFRe0oAeqd6JviCDq9B+z7yq/YDUAFRe1oABrVbvhgqIGovAIoRQgVE7QXA4gA8Wy+5F7WRV6BUAovFqGgejd+znVO3nm6DhFVsRdCZ2kQBOHx5//oc/qCKAJiPRhYAKT0XAClhdFUiAFzh2q+wANhPU5dHAsAVrv0KC4D9NHV5JABc4dqvsADYT1OXRwLAFa79CguA/TR1eSQAXOHar7AA2E9Tl0fLA2Bd36q4a+9SoLDwyGcgItvzYZcijVkAhE+mwl6sYTjy6Sf3eT7qegSAylu8qL/s9ksAMJLG2APN2r/p02ckA/TgWdMAa4CZ+1VyTT0KgLJAPkrTR393IQpAt9VaIA+C6XP/0XUEAEGQA0CZ+GgGONwfeb3JCdVetVC8LqMZ4L0kHYTj611e99IqxZvjo2j9m0n6z1UfTbtzJhOAlCipkrkREABz403XmgCgk2RuhwTA3HjTtSYA6CSZ2yEBMDfedK0JADpJ5nZIAMyNN11rfwHN12OQr51tdAAAAABJRU5ErkJggg==";
const Fuzhi = new SiteInfo("复制", "%s", "https://www.baidu.com/", FUZHI_ICO);
// 知乎
const Zhihu = new SiteInfo(
"知乎",
"https://www.zhihu.com/search?q=%s",
"https://www.zhihu.com/",
"https://static.zhihu.com/heifetz/favicon.ico",
);
//fsou
const FSOU = new SiteInfo(
"FSOU",
"https://fsoufsou.com/search?q=%s&tbn=all",
"https://fsoufsou.com/",
"https://fsoufsou.com/favicon.ico");
const Baidufanyi = new SiteInfo(
"百度翻译",
"https://fanyi.baidu.com/#auto/zh/%s",
"https://fanyi.baidu.com/",
"https://fanyi-cdn.cdn.bcebos.com/webStatic/translation/img/favicon/favicon.ico",
);
const Baiduwangpan = new SiteInfo(
"百度网盘",
"https://pan.baidu.com/disk/home?#/search?key=%s",
"https://pan.baidu.com/",
"https://nd-static.bdstatic.com/m-static/v20-main/favicon-main.ico",
);
const Baidubaike = new SiteInfo(
"百度百科",
"https://baike.baidu.com/search/word?pic=1&sug=1&word=%s",
"https://baike.baidu.com/",
"https://baike.baidu.com/favicon.ico",
);
const Baiduzhidao = new SiteInfo(
"百度知道",
"https://zhidao.baidu.com/search?word=%s",
"https://zhidao.baidu.com/",
"https://www.baidu.com/favicon.ico?t=20171027",
);
const Baiduxinwen = new SiteInfo(
"百度新闻",
"https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&rsv_dl=ns_pc&word=%s",
"https://news.baidu.com/",
"https://www.baidu.com/favicon.ico",
);
const Baiduwenku = new SiteInfo(
"百度文库",
"https://wenku.baidu.com/search?word=%s",
"",
"https://www.baidu.com/favicon.ico",
);
const Baidumap = new SiteInfo(
"百度地图",
"https://map.baidu.com/search?querytype=s&wd=%s",
"",
"https://map.baidu.com/favicon.ico",
);
const Baidutupian = new SiteInfo(
"百度图片",
"https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%s",
"",
"https://www.baidu.com/favicon.ico",
);
const Baiduxueshu = new SiteInfo(
"百度学术",
"https://xueshu.baidu.com/s?wd=%s",
"",
"https://www.baidu.com/favicon.ico",
);
const Baidutieba = new SiteInfo(
"贴吧",
"https://tieba.baidu.com/f?kw=%s&ie=utf-8",
"https://tieba.baidu.com/",
"https://www.baidu.com/favicon.ico",
);
const Googlefanyi = new SiteInfo(
"谷歌翻译",
"https://translate.google.com/?q=%s",
"",
"https://ssl.gstatic.com/translate/favicon.ico",
);
const Googlemap = new SiteInfo(
"谷歌地图",
"https://www.google.com/maps/search/%s",
"https://www.google.com/maps/",
"https://s2.loli.net/2022/08/17/SloXZzf9nC6LPbq.png",
);
const Googleearth = new SiteInfo(
"谷歌地球",
"https://earth.google.com/web/search/%s",
"https://earth.google.com/web/",
"https://s2.loli.net/2022/08/17/IOiPDl7YX3QnmsC.png",
);
const Googlexueshu = new SiteInfo(
"谷歌学术",
"https://scholar.google.com/scholar?hl=zh-CN&q=%s",
"",
"https://s2.loli.net/2022/08/17/4BaC1Acu2ebXJR9.png",
);
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",
"https://s2.loli.net/2022/08/17/RTdZQMD2Aw8eobn.png",
);
const StackOverflow = new SiteInfo(
"StackOverflow",
"https://stackoverflow.com/search?q=%s",
"",
"https://s2.loli.net/2022/08/16/mgMHa8UTekYIdV4.png",
);
const Taobao = new SiteInfo(
"淘宝",
"https://s.taobao.com/search?q=%s",
"https://www.taobao.com/",
"https://www.taobao.com/favicon.ico",
);
const Jingdong = new SiteInfo(
"京东",
"https://search.jd.com/Search?keyword=%s&enc=utf-8",
"https://www.jd.com/",
"https://search.jd.com/favicon.ico",
);
const Tianmao = new SiteInfo(
"天猫",
"https://list.tmall.com/search_product.htm?q=%s",
"https://www.tmall.com/",
"https://www.tmall.com/favicon.ico",
);
const Maimai = new SiteInfo(
"脉脉",
"https://maimai.cn/web/search_center?type=gossip&query=%s&highlight=true",
"https://maimai.cn/feed_list",
"https://maimai.cn/favicon.ico",
);
const Weibo = new SiteInfo(
"微博",
"https://s.weibo.com/weibo/%s",
"https://weibo.com/",
"https://s.weibo.com/favicon.ico",
);
//=========================定义网站数据=======================================
const defaultConf = {
//
// 基本配置
//
showToolbar: true, // 显示划词工具条
showFrequentEngines: true, // 显示常用搜索引擎
showClassifiedEngines: true, // 显示分类搜索引擎
showPlaceholder: false, // 显示使用方式提示信息(如搜索框placeholder)
enableOnInput: true, // 是否在input/textarea上启用划词和快捷键
autoCopyToClipboard: false, // 划词时自动复制到剪贴板(内容为文本格式)
//
// 常用搜索引擎列表
// 属性:
// - name 搜索引擎名称
// - url 搜索引擎搜索url
// - home 搜索引擎主页url
// - icon 搜索引擎图标, base64编码
// - enable 是否启用
//
frequentEngines: [
Baidu.callSiteInformation(),
Google.callSiteInformation(),
FSOU.callSiteInformation(false),
Bing.callSiteInformation(),
Baidufanyi.callSiteInformation(false),
GitHub.callSiteInformation(),
Zhihu.callSiteInformation(false),
Googlenews.callSiteInformation(false),
Bilibili.callSiteInformation(),
Taobao.callSiteInformation(false),
Jingdong.callSiteInformation(false),
Tianmao.callSiteInformation(false),
Baiduwangpan.callSiteInformation(false),
Maimai.callSiteInformation(false),
YOUTUBE.callSiteInformation(),
V2EX.callSiteInformation(),
Zhida.callSiteInformation(),
Fuzhi.callSiteInformation()
],
};
///////////////////////////////////////////////////////////////////
// css样式
///////////////////////////////////////////////////////////////////
const sheet = `
/*
注意: 为了避免网页style对该工具的影响, 所有样式均进行初始化并加入!important,
js中设置style时也要注意将其设置为important, 否则不能生效.
*/
/* 划词工具条 */
.qs-toolbar {
/* 初始化所有style, 避免被网页本身的style影响 */
// all: initial !important;
margin: 0;
position: absolute !important;
display: flex !important;
flex-direction: row;
align-items: center;
justify-items: center;
gap: 8px;
height: 50px !important;
padding: 5px 4px !important;
white-space: nowrap !important;
border: 2px solid rgba(0, 196, 182, 0.9) !important;
background-color: white !important;
z-index: 10000 !important;
border-radius: 15px;
}
.qs-toolbar-icon {
// all: initial !important;
display: block !important;
margin: 0px !important;
padding: 2px !important;
width: 35px !important;
height: 35px !important;
// border: 1px solid #FFF !important;
transition: all 0.3s ease;
cursor: pointer !important;
border-radius: 15px;
}
.qs-toolbar-icon:hover {
// border: 1px solid #CCC !important;
transform: scale(1.1, 1.1);
}
.engine-name {
vertical-align: middle !important;
// margin-left: 2px !important;
font-size: 20px !important;
font-family: arial,sans-serif !important;
font-weight: 400 !important;
color: #5F5F5F !important;
height: 45px !important;
width: 45px !important;
border: 1px solid #262626 !important;
cursor: pointer !important;
display: flex;
justify-content: center;
align-items: center;
background-color: white !important;
transition: all 0.3s ease;
padding: 2px !important;
box-sizing: border-box;
border-radius: 15px;
outline: 1px solid rgba(0, 196, 182, 0.8) !important;
}
.engine-name:hover {
outline: 3px solid #6DC5D1 !important;
}
`;
///////////////////////////////////////////////////////////////////
// 全局变量
///////////////////////////////////////////////////////////////////
var shadowHost = null;
var shadowRoot = null;
var conf = await GM.getValue("qs-conf", defaultConf);
var qsPageLock = false; // 是否在当前页面锁定快搜所有功能, 锁定之后仅响应解锁快捷键
var qsToolbar = null; // 快搜划词工具条
var qsMainBox = null; // 快搜主窗口
var qsSettingBox = null; // 快搜设置窗口
var selectionBak_qs = null;
///////////////////////////////////////////////////////////////////
// 功能函数
///////////////////////////////////////////////////////////////////
// 获取可视窗口在文档(页面)中的绝对位置
function getWindowPosition() {
return {
top: window.scrollY,
bottom: window.scrollY + window.innerHeight,
left: window.scrollX,
right: window.scrollX + window.innerWidth,
};
}
// 获取选中文本
function getSelection() {
return window.getSelection().toString().trim();
}
// 判断是否允许工具条
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 (
(qsMainBox && qsMainBox.contains(target)) ||
(qsSettingBox && 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}/`;
}
}
// 打开url.
// 当按下Cmd(Mac系统)/Ctrl(Windows/Linux系统), 则后台打开url.
async function openUrl(url, event) {
// console.log(`Quick Search: open url, url is ${url}`);
if (!url) return;
if (event.metaKey || event.ctrlKey) {
await GM.openInTab(url, true);
} else {
await 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 (engine.name === "直达") {
var Expression =
/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
var objExp = new RegExp(Expression);
if (objExp.test(query) == false) {
query = "https://" + query;
}
openUrl(query, event);
return;
}
if (engine.name === "复制") {
copyText(query);
hideToolbar();
return;
}
if (query) {
var url = engine.url.replace("%s", encodeURIComponent(query));
openUrl(url, event);
} else {
openUrl(getEngineHome(engine), 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 = getSelection();
if (!query) {
query = selectionBak_qs;
}
openEngineOnClick(engine, query, event);
}
///////////////////////////////////////////////////////////////////
// 元素创建 与 元素事件响应
///////////////////////////////////////////////////////////////////
// 加载css样式
function loadSheet() {
var css = document.createElement("style");
css.type = "text/css";
css.id = "qs-css";
css.textContent = sheet;
shadowRoot.appendChild(css);
}
//
// 划词工具条
//
// 创建划词工具条
function createToolbar() {
// 工具条container
var toolbar = document.createElement("div");
toolbar.id = "qs-toolbar";
toolbar.className = "qs-toolbar";
toolbar.style.setProperty("display", "none", "important");
shadowRoot.appendChild(toolbar);
// 常用搜索引擎按钮
conf.frequentEngines.forEach((engine, index) => {
if (!engine.enable) return; // 此处return搭配forEach, 请勿改为其他形式循环
var ele = document.createElement("div");
ele.className = "engine-name";
var icon = document.createElement("img");
icon.id = "qs-toolbar-icon-" + index;
icon.className = "qs-toolbar-icon";
icon.src = engine.icon;
icon.alt = engine.name;
icon.title = engine.name;
// icon.style.cssText = "display: none !important";
icon.addEventListener(
"click",
function (e) {
openEngineOnClickToolbar(engine, e);
},
true,
);
ele.appendChild(icon);
toolbar.appendChild(ele);
});
qsToolbar = toolbar;
}
// 划词工具条是否处于显示状态
function isToolbarVisual() {
return qsToolbar && qsToolbar.style.display !== "none";
}
// 显示划词工具条
function showToolbar(event) {
ensureQuickSearchAlive();
if (!qsToolbar || isToolbarVisual()) {
return;
}
var toolbar = qsToolbar;
toolbar.style.setProperty("top", "-10000px", "important");
toolbar.style.setProperty("left", "-10000px", "important");
toolbar.style.setProperty("display", "flex", "important");
var toolbarClientRect = toolbar.getBoundingClientRect();
var toolbarWidth = toolbarClientRect.right - toolbarClientRect.left;
var toolbarHeight = toolbarClientRect.bottom - toolbarClientRect.top;
var toolbarNewTop = event.pageY - 100;
var toolbarNewLeft = event.pageX - toolbarWidth / 2;
var windowPos = getWindowPosition();
if (toolbarNewTop - 10 < windowPos.top) {
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");
}
// 隐藏划词工具条
function hideToolbar() {
if (qsToolbar) {
qsToolbar.style.setProperty("display", "none", "important");
}
}
//复制
var copyText = function (button, content, success) {
if (!button) {
return;
}
if (typeof content == 'function') {
success = content;
content = null;
}
success = success || function () {
};
// 是否降级使用
var isFallback = !navigator.clipboard;
if (typeof button == 'string' && !content) {
if (content === false) {
isFallback = true;
}
content = button;
button = null;
}
var eleTextarea = document.querySelector('#tempTextarea');
if (!eleTextarea && isFallback) {
eleTextarea = document.createElement('textarea');
eleTextarea.style.width = 0;
eleTextarea.style.position = 'fixed';
eleTextarea.style.left = '-999px';
eleTextarea.style.top = '10px';
eleTextarea.setAttribute('readonly', 'readonly');
document.body.appendChild(eleTextarea);
}
var funCopy = function (text, callback) {
callback = callback || function () {
};
if (!isFallback) {
navigator.clipboard.writeText(text).then(function () {
callback();
// 成功回调
success(text);
}, function () {
// 禁止写入剪切板后使用兜底方法
copyText(text, false);
callback();
// 成功回调
success(text);
});
return;
}
eleTextarea.value = text;
eleTextarea.select();
document.execCommand('copy', true);
callback();
// 成功回调
success(text);
};
funCopy(content);
return;
};
//
// 创建以上所有东东
//
function initQuickSearch() {
selectionBak_qs = null;
shadowHost = document.createElement("div");
document.body.appendChild(shadowHost);
shadowRoot = shadowHost.attachShadow({mode: 'closed'});
loadSheet();
if (conf.showToolbar) {
createToolbar();
}
}
// 百度等网页会在不刷新页面的情况下改变网页内容, 导致quick search除了js脚本之外的东东全部没了.
// 此函数用于确保quick search处于可用状态, 需在toolbar或mainbox等窗口每次显示时调用.
function ensureQuickSearchAlive() {
if (!shadowHost || !shadowRoot) {
initQuickSearch();
} else {
var css = shadowRoot.getElementById("qs-css");
if (!css) {
initQuickSearch();
}
}
}
initQuickSearch();
///////////////////////////////////////////////////////////////////
// 全局事件响应
//
// 我们将全局事件绑定在捕获阶段执行, 避免事件响应被网页自带的脚本拦截掉.
///////////////////////////////////////////////////////////////////
//
// top window和iframe共用的事件处理逻辑
//
document.addEventListener(
"mousedown",
function (e) {
var target = e.target;
// 隐藏工具条
if (isToolbarVisual() && !qsToolbar.contains(target) && !shadowHost.contains(target)) {
selectionBak_qs = null;
hideToolbar();
}
},
true,
);
document.addEventListener(
"mouseup",
function (e) {
var target = e.target;
var selection = getSelection();
if (!qsToolbar.contains(target) && !shadowHost.contains(target)) {
selectionBak_qs = selection;
}
// 显示/隐藏工具条
if (isAllowToolbar(e)) {
if (selection && !isToolbarVisual()) {
showToolbar(e);
}
if (!selection && isToolbarVisual() && !qsToolbar.contains(target) && !shadowHost.contains(target)) {
selectionBak_qs = null;
hideToolbar();
}
}
// 划词时自动复制文本到剪贴板
if (
conf.autoCopyToClipboard &&
target.tagName !== "INPUT" &&
target.tagName !== "TEXTAREA" &&
!qsMainBox.contains(target) &&
!qsSettingBox.contains(target)
) {
if (selection) {
GM.setClipboard(selection, "text/plain");
}
}
},
true,
);
})();