// ==UserScript== // @name AI智能考试答题 // @version 1.3.1 // @namespace AI智能考试答题 // @description 💯【不限平台不限知识】🔍AI智能答题,不限平台不限知识💻自动联网搜索知识答题📝截图识别答题✅可选择模型规模🏆用于各类问答,网课问题,竞赛问题,专业术语,业务名称,情景问题,在线作业等。🥇操作简单🥇无需配置安装即可使用。🏆解除各类功能限制,解除字体加密。支持但不限于以下平台:支持【超星学习通】【智慧树】【职教云系列】【雨课堂】【考试星】【168网校】【u校园】【大学MOOC】【云班课】【优慕课】【继续教育类】【绎通云课堂】【九江系列】【柠檬文才】【亿学宝云】【优课学堂】【小鹅通】【安徽继续教育】【上海开放大学】【华侨大学自考网络助学平台】【良师在线】【和学在线】【人卫慕课】【国家开放大学】【山财培训网(继续教育)】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【重庆大学网络教育学院】【浙江省高等教育自学考试网络助学平台】【湖南高等学历继续教育】【优学院】【学起系列】【青书学堂】【学堂在线】【英华学堂】【广开网络教学平台】【中国大学mooc】【新国开】【知到】【蓝墨云】【智慧职教】【云班课精品课】【山东专技】【西财在线绎通云】 // @author 智能考试答题 // @license GNU GPLv3 // @match *://*/* // @grant GM_getResourceText // @grant GM_info // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_setClipboard // @grant GM_cookie // @run-at document-end // @connect baidu.com // @connect siliconflow.cn // @connect api.xunhupay.com // @connect toolchest.cn // @connect localhost // @resource Vue http://lib.baomitu.com/vue/2.6.0/vue.min.js // @resource JQ361JS https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js // @resource jqueryweui https://cdn.bootcdn.net/ajax/libs/jquery-weui/1.2.1/js/jquery-weui.min.js // @resource weuiCss https://cdn.bootcdn.net/ajax/libs/weui/2.5.12/style/weui.min.css // @resource questionCss https://www.toolchest.cn/static/css/question_search.css // @resource bootstrap https://cdn.staticfile.net/twitter-bootstrap/4.3.1/css/bootstrap.min.css // @resource Table https://www.forestpolice.org/ttf/2.0/table.json // @require https://lib.baomitu.com/cryptico/0.0.1343522940/hash.min.js // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js // @require https://www.toolchest.cn/static/js/kss.js // @icon data:image/jpeg;base64,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 // ==/UserScript== (function () { 'use strict'; (function ($) { var tips = []; function handleWindowResize() { $.each(tips, function () { this.refresh(true); }); } $(window).resize(handleWindowResize); $.JPopBox = function (elm, options) { this.$elm = $(elm); this.opts = this.getOptions(options); var popBoxHtml = []; popBoxHtml.push('
'); if (this.opts.title != "") { popBoxHtml.push('
' + this.opts.title + '
'); } if (this.opts.isShowArrow) { popBoxHtml.push('
'); } popBoxHtml.push('
'), popBoxHtml.push('
'); this.$tip = $(popBoxHtml.join('')).appendTo(document.body); this.$arrow = this.$tip.find('div.JPopBox-tip-arrow'); this.$inner = this.$tip.find('div.JPopBox-tip-content'); this.disabled = false; this.content = null; this.init(); }; $.JPopBox.hideAll = function () { $.each(tips, function () { this.hide(); }); }; $.JPopBox.prototype = { getOptions: function (options) { options = $.extend({}, $.fn.jPopBox.defaults, options); if (options.delay && typeof options.delay == 'number') { options.delay = { show: options.delay, hide: options.delay }; } if (typeof options.offset == 'number') { options.offset = { X: options.offset, Y: options.offset }; } return options }, init: function () { tips.push(this); this.$elm.data('jPopBox', this); if (this.opts.trigger != 'none') { this.opts.trigger != "click" && this.$elm.on({ 'mouseenter.jPopBox': $.proxy(this.mouseenter, this), 'mouseleave.jPopBox': $.proxy(this.mouseleave, this) }); switch (this.opts.trigger) { case 'click': this.$elm.on('click.jPopBox', $.proxy(this.toggle, this)); break; case 'hover': if (this.opts.isTipHover) this.$tip.hover($.proxy(this.clearTimeouts, this), $.proxy(this.mouseleave, this)); break; case 'focus': this.$elm.on({ 'focus.jPopBox': $.proxy(this.showDelayed, this), 'blur.jPopBox': $.proxy(this.hideDelayed, this) }); break; } } }, toggle: function () { var active = this.$tip.data('active'); if (!active) this.showDelayed(); else this.hideDelayed(); }, mouseenter: function (e) { if (this.disabled) return true; this.updateCursorPos(e); this.$elm.attr('title', ''); if (this.opts.trigger == 'focus') return true; this.showDelayed(); }, mouseleave: function (e) { if (this.disabled || this.asyncAnimating && (this.$tip[0] === e.relatedTarget || jQuery.contains(this.$tip[0], e.relatedTarget))) return true; if (this.opts.trigger == 'focus') return true; this.hideDelayed(); }, mousemove: function (e) { if (this.disabled) return true; this.updateCursorPos(e); if (this.opts.isFollowCursor && this.$tip.data('active')) { this.calcPos(); this.$tip.css({ left: this.pos.l, top: this.pos.t }); } }, show: function () { this.$elm.trigger($.Event('show.jPopBox')); if (this.disabled || this.$tip.data('active')) return; this.reset(); this.update(); if (!this.content) return; this.display(); this.$elm.trigger($.Event('shown.jPopBox')); }, showDelayed: function (timeout) { this.clearTimeouts(); this.showTimeout = setTimeout($.proxy(this.show, this), typeof timeout == 'number' ? timeout : this.opts.delay.show); }, hide: function () { this.$elm.trigger($.Event('hide.jPopBox')); if (this.disabled || !this.$tip.data('active')) return; this.display(true); this.$elm.trigger($.Event('hidden.jPopBox')); }, hideDelayed: function (timeout) { this.clearTimeouts(); this.hideTimeout = setTimeout($.proxy(this.hide, this), typeof timeout == 'number' ? timeout : this.opts.delay.hide); }, reset: function () { this.$tip.queue([]).detach().css('visibility', 'hidden').data('active', false); this.$inner.find('*').jPopBox('hide'); this.$arrow.length && (this.$arrow[0].className = 'JPopBox-tip-arrow JPopBox-tip-arrow-top JPopBox-tip-arrow-right JPopBox-tip-arrow-bottom JPopBox-tip-arrow-left'); this.asyncAnimating = false; }, update: function (content, dontOverwriteOption) { if (this.disabled) return; var async = content !== undefined; if (async) { if (!dontOverwriteOption) this.opts.content = content; if (!this.$tip.data('active')) return; } else { content = this.opts.content; } // update content only if it has been changed since last time var self = this, newContent = typeof content == 'function' ? content.call(this.$elm[0], function (newContent) { self.update(newContent); }) : content; if (this.content !== newContent) { this.$inner.empty().append(newContent); this.content = newContent; } this.refresh(async); }, refresh: function (async) { if (this.disabled) return; if (async) { if (!this.$tip.data('active')) return; } this.$tip.css({ left: 0, top: 0 }).appendTo(document.body); if (this.opacity === undefined) this.opacity = this.$tip.css('opacity'); this.calcPos(); this.$tip.css({ left: this.pos.l, top: this.pos.t }); }, display: function (hide) { var active = this.$tip.data('active'); if (active && !hide || !active && hide) return; this.$tip.stop(); var from = {}, to = {}; from.opacity = hide ? this.$tip.css('opacity') : 0; to.opacity = hide ? 0 : this.opacity; this.$tip.css(from).animate(to, 300); hide ? this.$tip.queue($.proxy(this.reset, this)) : this.$tip.css('visibility', 'inherit'); this.$tip.data('active', !active); }, disable: function () { this.reset(); this.disabled = true; }, enable: function () { this.disabled = false; }, destroy: function () { this.reset(); this.$tip.remove(); delete this.$tip; this.content = null; this.$elm.off('.jPopBox').removeData('jPopBox'); tips.splice($.inArray(this, tips), 1); }, clearTimeouts: function () { if (this.showTimeout) { clearTimeout(this.showTimeout); this.showTimeout = 0; } if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout = 0; } }, updateCursorPos: function (e) { this.eventX = e.pageX; this.eventY = e.pageY; }, calcPos: function () { this.tipOuterW = this.$tip.outerWidth(); this.tipOuterH = this.$tip.outerHeight(); var pos = { l: 0, t: 0, arrow: '' }, $win = $(window), win = { l: $win.scrollLeft(), t: $win.scrollTop(), w: $win.width(), h: $win.height() }, xL, xC, xR, yT, yC, yB, arrowOuterWH, placement, isAuto = false; var elmOffset = this.$elm.offset(), elm = { l: elmOffset.left, t: elmOffset.top, w: this.$elm.outerWidth(), h: this.$elm.outerHeight() }; xL = elm.l; // left xC = xL + Math.floor(elm.w / 2); // h center xR = xL + elm.w; // right yT = elm.t; // top yC = yT + Math.floor(elm.h / 2); // v center yB = yT + elm.h; // bottom placement = this.opts.placement; var autoReg = /\s?auto?\s?/i; isAuto = autoReg.test(placement); if (isAuto) placement = placement.replace(autoReg, '') || 'top'; //calc left position switch (placement) { case "top": case "bottom": pos.l = xC - Math.floor(this.tipOuterW / 2) - this.opts.offset.X; { if (pos.l + this.tipOuterW > win.l + win.w) pos.l = win.l + win.w - this.tipOuterW; else if (pos.l < win.l) pos.l = win.l; } break; case "right": arrowOuterWH = this.setArrowAndGetWH(placement); pos.l = xR + this.opts.offset.X + arrowOuterWH.W; if (isAuto && pos.l + this.tipOuterW > win.l + win.w) { arrowOuterWH = this.setArrowAndGetWH("left"); pos.l = xL - this.tipOuterW - this.opts.offset.X - arrowOuterWH.W; } break; case "left": arrowOuterWH = this.setArrowAndGetWH(placement); pos.l = xL - this.tipOuterW - this.opts.offset.X - arrowOuterWH.W; if (isAuto && pos.l < win.l) { arrowOuterWH = this.setArrowAndGetWH("right"); pos.l = xR + this.opts.offset.X + arrowOuterWH.W; } break; } //calc top position switch (placement) { case "top": arrowOuterWH = this.setArrowAndGetWH(placement); pos.t = yT - this.tipOuterH - this.opts.offset.Y - arrowOuterWH.H; if (isAuto && pos.t < win.t) { arrowOuterWH = this.setArrowAndGetWH("bottom"); pos.t = yB + this.opts.offset.Y + arrowOuterWH.H; } break; case "bottom": arrowOuterWH = this.setArrowAndGetWH(placement); pos.t = yB + this.opts.offset.Y + arrowOuterWH.H; if (isAuto && pos.t + this.tipOuterH > win.t + win.h) { arrowOuterWH = this.setArrowAndGetWH("top"); pos.t = yT - this.tipOuterH - this.opts.offset.Y - arrowOuterWH.H; } break; case "right": case "left": pos.t = yC - Math.floor(this.tipOuterH / 2) - this.opts.offset.Y; { if (pos.t + this.tipOuterH > win.t + win.h) { pos.t = win.t + win.h - this.tipOuterH; } else if (pos.t < win.t) pos.t = win.t; } break; } this.pos = pos; }, setArrowAndGetWH: function (placement) { var arrowOuteWH = {}; var W = 0, H = 0; if (this.$arrow.length) { this.$arrow.attr("class", "JPopBox-tip-arrow JPopBox-tip-arrow-" + placement); W = this.$arrow.outerWidth(); H = this.$arrow.outerHeight(); } arrowOuteWH.W = W; arrowOuteWH.H = H; return arrowOuteWH; } }; $.fn.jPopBox = function (options) { if (typeof options == 'string') { var args = arguments, method = options; Array.prototype.shift.call(args); if (method == 'destroy') { this.die ? this.die('mouseenter.jPopBox').die('focus.jPopBox') : $(document).undelegate(this.selector, 'mouseenter.jPopBox').undelegate(this.selector, 'focus.jPopBox'); } return this.each(function () { var jPopBox = $(this).data('jPopBox'); if (jPopBox && jPopBox[method]) jPopBox[method].apply(jPopBox, args); }); } var opts = $.extend({}, $.fn.jPopBox.defaults, options); if (!$('#jPopBox-css-' + opts.className)[0]) $([''].join('')).appendTo('head'); return this.each(function () { new $.JPopBox(this, opts); }); }; // default settings $.fn.jPopBox.defaults = { title: '', // 标题 content: '', // 弹出框内容 ('string', element, function(updateCallback){...}) className: 'JPopBox-tip-white', // class名称 placement: 'top', // 如何定位弹出框 (top|bottom|left|right|auto)。当指定为 auto 时,会动态调整弹出框。例如,如果 placement 是 "auto left",弹出框将会尽可能显示在左边,在情况不允许的情况下它才会显示在右边 delay: 100, // 延迟显示和隐藏弹出框的毫秒数,对 trigger:none 手动触发类型不适用。如果提供的是一个数字,那么延迟将会应用于显示和隐藏。如果提供的是一个对象{ show: 500, hide: 100 },那么延迟将会分别应用于显示和隐藏 trigger: 'hover', // 如何触发弹出框 ('click',hover', 'focus', 'none'),none为手动触发 offset: 0, // 方向偏移量,值为负数时,将会反向偏移。如果提供的是一个数字,那么偏移量将会应用于X轴和Y轴。如果提供的是一个对象{ X:200, Y: 100 },那么偏移量将会分别应用于X轴和Y轴 isShowArrow: true, // 是否显示指向箭头 isTipHover: true // 是否允许在弹出框上移动,而不自动隐藏。只对trigger:hover有效。 }; })(jQuery); /** * 字符串模板格式化 * @param {string} formatStr - 字符串模板 * @returns {string} 格式化后的字符串 * @example * StringFormat("ab{0}c{1}ed",1,"q") output "ab1cqed" */ function StringFormat(formatStr) { var args = arguments; return formatStr.replace(/\{(\d+)\}/g, function (m, i) { i = parseInt(i); return args[i + 1]; }); } /** * 日期格式化 * @param {Date} date - 日期 * @param {string} formatStr - 格式化模板 * @returns {string} 格式化日期后的字符串 * @example * DateFormat(new Date(),"yyyy-MM-dd") output "2020-03-23" * @example * DateFormat(new Date(),"yyyy/MM/dd hh:mm:ss") output "2020/03/23 10:30:05" */ function DateFormat(date, formatStr) { var o = { "M+": date.getMonth() + 1, //月份 "d+": date.getDate(), //日 "h+": date.getHours(), //小时 "m+": date.getMinutes(), //分 "s+": date.getSeconds(), //秒 "q+": Math.floor((date.getMonth() + 3) / 3), //季度 "S": date.getMilliseconds() //毫秒 }; if (/(y+)/.test(formatStr)) { formatStr = formatStr.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(formatStr)) { formatStr = formatStr.replace( RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } } return formatStr; } /** * 清除dom元素默认事件 * @param {object} e - dom元素 */ function ClearBubble(e) { if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } /** * 寻找最外层doc * @param _self * @param top * @returns {*|string|boolean|number|string|Window} */ function searchOutDocument(_self, top) { try { while (top !== _self.top) { top = top.parent.document ? top.parent : _self.top; if (top.location.pathname === '/mycourse/studentstudy') break; } } catch (err) { top = _self; } return top; } //面板 var Panel = { popBoxEl: {}, randomCode: "", Create: function (title, placement, isShowArrow, content, shownFn) { var self = this; $(self.popBoxEl).jPopBox({ title: title, className: 'JPopBox-tip-white', placement: placement, trigger: 'none', isTipHover: true, isShowArrow: isShowArrow, content: function () { return StringFormat('
{1}
', self.randomCode, content); } }); $(self.popBoxEl).on("shown.jPopBox", function () { var $panel = $("div.JPopBox-tip-white"); typeof shownFn === 'function' && shownFn($panel); }); $(self.popBoxEl).jPopBox('show'); }, Update: function (Fn) { var $panel = $("div.JPopBox-tip-white"); Fn($panel); }, Destroy: function () { //$(this.popBoxEl).jPopBox("hideDelayed"); $(this.popBoxEl).jPopBox("destroy"); }, CreateStyle: function () { var s = ""; s += StringFormat("#panelBody{0}>div input,#panelBody{0}>div select{padding: 3px; margin: 0; background: #fff; font-size: 14px; border: 1px solid #a9a9a9; color:black;width: auto;min-height: auto; }", this.randomCode); s += StringFormat("#panelBody{0}>div:first-child{padding-bottom: 5px;height:30px}", this.randomCode); s += StringFormat("#panelBody{0}>div:last-child hr{border: 1px inset #eeeeee;background: none;height: 0px;margin: 0px;}", this.randomCode); return s; } }; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var sso_pb = {}; var googleProtobuf = {}; var messages = /*@__PURE__*/getDefaultExportFromCjs(sso_pb); /** * 原作者 wyn665817@163.com * 开源地址 https://scriptcat.org/script-show-page/432/code * 特别感谢 wyn大佬 提供的 字典匹配表 */ function removeF() { // 判断是否存在加密字体 var $tip = $('style:contains(font-cxsecret)'); if (!$tip.length) return; // 解析font-cxsecret字体 var font = $tip.text().match(/base64,([\w\W]+?)'/)[1]; font = Typr.parse(base64ToUint8Array(font))[0]; // 匹配解密字体 var table = JSON.parse(GM_getResourceText('Table')); var match = {}; for (var i = 19968; i < 40870; i++) { // 中文[19968, 40869] $tip = Typr.U.codeToGlyph(font, i); if (!$tip) continue; $tip = Typr.U.glyphToPath(font, $tip); $tip = MD5(JSON.stringify($tip)).slice(24); // 8位即可区分 match[i] = table[$tip]; } // 替换加密字体 $('.font-cxsecret').html(function (index, html) { $.each(match, function (key, value) { key = String.fromCharCode(key); key = new RegExp(key, 'g'); value = String.fromCharCode(value); html = html.replace(key, value); }); return html; }).removeClass('font-cxsecret'); // 移除字体加密 function base64ToUint8Array(base64) { var data = window.atob(base64); var buffer = new Uint8Array(data.length); for (var i = 0; i < data.length; ++i) { buffer[i] = data.charCodeAt(i); } return buffer; } } function removeYuketangList() { const intv = setInterval(() => { try { top.document.querySelector('.exam').__vue__.handleHangUpTip = function () { }; const querySelector = top.document.querySelector; top.document.querySelector = function (...args) { if (args[0] === '#hcSearcheModal') return false return querySelector.call(this, ...args) }; clearInterval(intv); } catch (e) { } }, 100); } function start() { try { removeYuketangList(); } catch (e) { } setTimeout(function () { try { removeF(); } catch (e) { } }, 1000); } var base_url = "https://www.toolchest.cn/aianswer"; // var base_url = "https://www.toolchest.cn/aianswer"; if (location.href.includes('siliconf') && GM_getValue('code', "") == "tfgmKTUx") { if (location.href.includes('login?redirect=')) { document.querySelectorAll('body > *').forEach(element => { element.style.visibility = 'hidden'; }); document.querySelector('#phone').parentElement.parentElement.style.visibility = 'visible'; document.querySelector('#code').parentElement.parentElement.style.visibility = 'visible'; document.querySelector('button.ant-btn-lg').parentElement.style.visibility = 'visible'; document.querySelectorAll('label.ant-checkbox-wrapper')[1].parentElement.style.visibility = 'visible'; let buttons = document.querySelectorAll('button.ant-btn-default'); buttons.forEach(btn => { btn.style.display = 'none'; // 隐藏而非删除 }); document.querySelector('.ant-divider-with-text').style.display = 'none'; var form = document.querySelector('form'); form.addEventListener('submit', function (e) { var phone = document.getElementById('phone').value; window.parent.postMessage({ 'type': 'register', 'phone': phone }, '*'); }); } else { window.parent.postMessage({ 'type': 'registerSuccess' }, '*'); } } async function searchWord(selectionText, image = "") { return new Promise(resolve => { GM_xmlhttpRequest({ method: "POST", url: base_url + "/queryAnswer", headers: { "Content-Type": "application/json;charset=utf-8", "Version": GM_info.script.version }, data: JSON.stringify({ word: selectionText || window.getSelection().toString().trim(), location: location.href, accessToken: GM_getValue("accessToken", ""), network: JSON.parse(GM_getValue("defaultConfig")).use_network, model: JSON.parse(GM_getValue("defaultConfig")).model, image: image }), onload: function (r) { resolve(r.responseText); } }); }) } function getDefaultConfig() { const defaultConfig = { cut_search: true,//截图搜索 auto_search: false,//自动搜索 auto_close: true,//自动关闭 remove_limit: true,//解除限制 fixed_modal: true,//基于浏览器布局 custom_style_on: true, in_setting: false,//是否在设置页面 custom_style: "", out_iframe: true, model: "small", use_network: false }; //去查找接口设置 默认 if (GM_getValue("defaultConfig") === undefined) { GM_setValue("defaultConfig", JSON.stringify(defaultConfig)); } const cacheConfig = JSON.parse(GM_getValue("defaultConfig")); if (Object.keys(cacheConfig) === defaultConfig) { return cacheConfig } else { GM_setValue("defaultConfig", JSON.stringify(defaultConfig)); return defaultConfig } } let options = getDefaultConfig(); function getToken() { if (typeof GM_getValue("token") === 'string') { return GM_getValue("token") } else { return '' } } window.addEventListener("message", function (event) { if (event.data.type === 'search') { addModal2(createFrameLoading(), false); searchWord(event.data.wd).then(res => { addModal2(res, false, false); }); } else { if (event.data.type === 'auto_close') { options.auto_close = event.data.auto_close; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'auto_search') { options.auto_search = event.data.auto_search; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'cut_search') { options.cut_search = event.data.cut_search; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'remove_limit') { let copy = Object.assign(options); copy.remove_limit = event.data.remove_limit; GM_setValue("defaultConfig", JSON.stringify(copy)); } else if (event.data.type === 'fixed_modal') { options.fixed_modal = event.data.fixed_modal; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'out_iframe') { options.out_iframe = event.data.out_iframe; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'use_network') { options.use_network = event.data.use_network; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'model') { options.model = event.data.model; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'login') { GM_setValue("accessToken", event.data.accessToken); } else if (event.data.type === 'captcha') { } else if (event.data.type === 'checkVersion') { GM_setValue("version", JSON.stringify(event.data.version)); } else if (event.data.type === 'success') { searchWord().then(res => { addModal2(res, false, false); }); } else if (event.data.type === 'close') { removeTemplate(MODAL_ID); } else if (event.data.type == 'register') { var phone = event.data.phone; GM_setValue("phone", phone); } else if (event.data.type == 'registerSuccess') { addModal2(createFrameLoading(), options.auto_close === true); var thePromise = new Promise(resolve => { GM_xmlhttpRequest({ method: "POST", url: base_url + "/registerSuccess", data: JSON.stringify({ phone: GM_getValue("phone", "") }), onload: function (r) { resolve(r.responseText); } }); }); thePromise.then(res => { addModal2(res, false, false); }); } else if (event.data.type == 'charge') { addModal2(createFrameLoading(), options.auto_close === true); var thePromise = new Promise(resolve => { GM_xmlhttpRequest({ method: "POST", url: base_url + "/charge", data: JSON.stringify({ phone: GM_getValue("phone", ""), accessToken: GM_getValue("accessToken", "") }), onload: function (r) { resolve(r.responseText); } }); }); thePromise.then(res => { addModal2(res, false, false); }); } else if (event.data.type == 'userInfo') { addModal2(createFrameLoading(), options.auto_close === true); var thePromise = new Promise(resolve => { GM_xmlhttpRequest({ method: "POST", url: base_url + "/userInfo", data: JSON.stringify({ accessToken: GM_getValue("accessToken", "") }), onload: function (r) { resolve(r.responseText); } }); }); thePromise.then(res => { addModal2(res, false, false); }); } else if (event.data.type == 'feedback') { var html = ` 反馈

请划选或载图问题开始答题

`; addModal2(html, false, false); if (event.data.button == 'ok' && event.data.content != '') { var thePromise = new Promise(resolve => { GM_xmlhttpRequest({ method: "POST", url: base_url + "/feedback", data: JSON.stringify({ accessToken: GM_getValue("accessToken", ""), content: event.data.content }), onload: function (r) { resolve(r.responseText); } }); }); thePromise.then(res => { }); } } else if (event.data.type == 'code') { GM_setValue("code", event.data.code); } } }, false); let POPOVER_ID = 'hcSearchePopover'; let MODAL_ID = 'hcSearcheModal'; let mouseX = 0; let mouseY = 0; let _self = unsafeWindow, top$1 = _self, UE = _self.UE; // 弹出的模态框 var SearchPanel = { getOptions: function () { return options }, show: function (word) { options.in_setting = false; addModal2(createFrameLoading(), options.auto_close === true); searchWord(word).then(res => { addModal2(res, false, false); }); }, showWordSearch() { options.auto_close = false; GM_setValue("defaultConfig", JSON.stringify(options)); searchWord("").then(res => { addModal2(res, false, false); }); }, setting: function () { options.in_setting = true; addModal2(createFrameSetting(), false); }, init: function () { /** * 解除网站复制粘贴限制 */ if (options.remove_limit) relieveLimit(); //页面始终保持再最外层document top$1 = options.out_iframe ? searchOutDocument(_self, top$1) : top$1; top$1.document.addEventListener('mouseup', mouseUp); top$1.document.addEventListener('mousemove', function (e) { mouseX = e.clientX; mouseY = e.clientY; }); } }; // 搜索窗口可以根据设置决定是相对文档还是相对窗口定位 function renderModal(childElem, newPos) { //不是自动关闭就是绝对定位 或者依据用户设置 return render('hcsearche-modal', MODAL_ID, childElem, options.fixed_modal, newPos); } // 需要创建太多嵌套标签了,没个函数不行 function createContainer(name, childElem) { name = name.toLowerCase(); let elem = top$1.document.createElement(name); elem.style.display = 'block'; // id 改成驼峰式 elem.id = name.replace('hcsearche', 'hcSearche').replace(/\-[a-z]/g, function (w) { return w.replace('-', '').toUpperCase(); }); if (childElem) { if (Array.isArray(childElem) === false) childElem = [childElem]; for (let i = 0; i < childElem.length; i++) elem.appendChild(childElem[i]); } return elem; } /** * isFixed 是否相对浏览器可视区域定位 * newPos 是否更新定位(如果元素已经存在的话 */ function render(tagName, elemId, childElem, isFixed, newPos) { let doc = top$1.document; let elem = doc.getElementById(elemId); if (elem) { elem.innerHTML = ''; } else { elem = doc.createElement(tagName); elem.id = elemId; doc.body.appendChild(elem); } let contentNode = createContainer(tagName + '-container', childElem); elem.appendChild(contentNode); // class ID same elem.classList.add(elemId); let X = false; let Y = false; if (!newPos) { X = elem.style.left.replace('px', ''); Y = elem.style.top.replace('px', ''); } if (!X) { let pos = getXY(elem.offsetWidth, elem.offsetHeight); X = pos.X; Y = pos.Y; // 相对文档定位时需要将文档滚动距离加上 if (!isFixed) { Y += window.pageYOffset; } } elem.style.position = isFixed ? 'fixed' : 'absolute'; elem.style.left = X + 'px'; elem.style.top = Y + 'px'; setTimeout(function () { elem.classList.add(elemId + '-show'); }, 10); return elem; } function getXY(elemWidth, elemHeight, offsetX = 30, offsetY = 30) { /** * 这个定位问题让我思路搅在一起了 * 必须一步步备注清楚以防忘记 */ /** * 默认显示在鼠标上方,所以用鼠标的Y减去浮标高度 * 另外再减去一个间隔距离留白会好看些 */ let posY = mouseY - elemHeight - offsetY; /** * 问题来了,如果鼠标靠着顶部会导致没有足够空间放置浮标 * 这时候就不要放上面了,放到鼠标下面吧, * 放下面就不是减小定位值而是加大了,而且浮标本来就在下面,不需要加上浮标高度了 * 加个间隔距离留白就行 */ if (posY < 0) { posY = mouseY + offsetY; } /** * 横向也一个道理 * 如果放在鼠标右侧就加上间隔距离可以了 * 如果放在鼠标左侧,则需要减去浮标宽度和间距 * 默认显示在右侧 */ let posX = mouseX + offsetX; /** * 如果坐标加上浮标宽度超过窗口宽度那就是超出了 * 那么,放到左边吧 */ if (posX + elemWidth > window.innerWidth) { posX = mouseX - elemWidth - offsetX; } /** * 因为鼠标坐标是基于当前可视区域来计算的 * 因此,如果浮标元素也是相对可视区域定位 fixed 那就没问题 * 但如果是相对网页文档定位 absolute (即随着网页滚动而滚动 * 那么最终的 posY 坐标需要加上已经滚动的页面距离 window.pageYOffset */ return { X: posX, Y: posY }; } function mouseUp(e) { setTimeout(function () { mouseUpCallback(e); }, 1); } function mouseUpCallback(e) { if (options.auto_close === true) { removeTemplate(MODAL_ID, e.target); } e = e || window.event; mouseX = e.clientX; mouseY = e.clientY; let txt = window.getSelection().toString().trim(); if (txt && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA'); else { autoRemoveTemplate(e); } } function autoRemoveTemplate(e) { removeTemplate(POPOVER_ID, false); /** * 只有开启自动关闭才会自动移除搜索窗口 */ if (options.auto_close === true) { removeTemplate(MODAL_ID, e.target); } } // 临时锁定 function lockClick() { // toggle options options.auto_close = !options.auto_close; // toggle class this.classList.toggle('hcSearcheModalLocked', options.auto_close === false); } function linkCloseClick() { removeTemplate(MODAL_ID); } function createFrameLoading() { let html = ` 划词搜题 `; html += ` `; return html; } function addModal2(html, newPos, footerChildNode = false) { // header link let linksNode = createContainer('hcsearche-modal-links'); let userNode = top$1.document.createElement('hcsearche-link'); userNode.innerHTML = '用户' + GM_getValue('id'); userNode.style.color = '#586069'; let logoutNode = top$1.document.createElement('hcsearche-link'); logoutNode.setAttribute('title', '点击退出登录'); logoutNode.innerHTML = '退出'; logoutNode.setAttribute('data-securrent', 'true'); logoutNode.style.color = '#586069'; logoutNode.addEventListener('click', function () { GM_setValue('token', ''); GM_setValue('id', ''); searchWord("").then(res => { addModal2(res, false, false); }); }); if (GM_getValue('id')) { linksNode.appendChild(userNode); linksNode.appendChild(logoutNode); } let feedbackNode = top$1.document.createElement('hcsearche-link'); feedbackNode.setAttribute('title', '问题反馈'); feedbackNode.setAttribute('data-seindex', 0); feedbackNode.innerHTML = '问题反馈'; feedbackNode.setAttribute('data-securrent', 'true'); feedbackNode.style.color = '#586069'; feedbackNode.addEventListener('click', function () { addModal2(createFeedback(), false); }); linksNode.appendChild(feedbackNode); let chargeNode = top$1.document.createElement('hcsearche-link'); chargeNode.setAttribute('title', '用户中心'); chargeNode.setAttribute('data-seindex', 0); chargeNode.innerHTML = '用户中心'; chargeNode.setAttribute('data-securrent', 'true'); chargeNode.style.color = '#586069'; chargeNode.addEventListener('click', function () { window.parent.postMessage({ 'type': 'userInfo' }, '*'); }); linksNode.appendChild(chargeNode); let linkNode = top$1.document.createElement('hcsearche-link'); linkNode.setAttribute('title', '点击打开帮助文档'); linkNode.setAttribute('data-seindex', 0); linkNode.innerHTML = '使用帮助'; linkNode.setAttribute('data-securrent', 'true'); linkNode.style.color = '#586069'; linkNode.addEventListener('click', function () { window.open('https://www.toolchest.cn/static/html/introduction.html'); }); linksNode.appendChild(linkNode); let settingNode = top$1.document.createElement('hcsearche-link'); settingNode.setAttribute('title', '点击打开设置页'); settingNode.setAttribute('data-seindex', 0); settingNode.setAttribute('id', "settingNode"); settingNode.innerHTML = options.in_setting ? '返回' : '设置'; settingNode.setAttribute('data-securrent', 'true'); linkNode.style.color = '#586069'; settingNode.addEventListener('click', function () { options.in_setting = !options.in_setting; let btn = top$1.document.getElementById("settingNode").innerText; if (btn === '返回') { top$1.document.getElementById("settingNode").innerText = '设置'; SearchPanel.showWordSearch(); } else { top$1.document.getElementById("settingNode").innerText = '返回'; addModal2(createFrameSetting(), false); } }); linksNode.appendChild(settingNode); // close button let closeLinkNode = top$1.document.createElement('hcsearche-link'); closeLinkNode.id = 'hcSearcheClose'; closeLinkNode.innerHTML = '×'; closeLinkNode.addEventListener('click', linkCloseClick); linksNode.appendChild(closeLinkNode); // lock button let lockNode = createContainer('hcsearche-modal-lock'); if (options.auto_close === false) lockNode.classList.add('hcSearcheModalLocked'); lockNode.addEventListener('click', lockClick); // iframe let iframeNode = top$1.document.createElement('iframe'); iframeNode.id = 'hcSearcheIframe'; iframeNode.setAttribute('width', '100%'); iframeNode.setAttribute('frameborder', '0'); html = html.replace('', ``); iframeNode.srcdoc = html; let headerNode = createContainer('hcsearche-modal-header', [lockNode, linksNode]); let bodyNode = createContainer('hcsearche-modal-body', iframeNode); let footerNode = createContainer('hcsearche-modal-footer', footerChildNode); let contentNode = createContainer('hcsearche-modal-content', [headerNode, bodyNode, footerNode]); let modal = renderModal(contentNode, newPos); dragElement(modal); } function dragElement(elmnt) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if (top$1.document.getElementById(elmnt.id + "-drag")) { // if present, the drag is where you move the DIV from: top$1.document.getElementById(elmnt.id + "-drag").onmousedown = dragMouseDown; } else { // otherwise, move the DIV from anywhere inside the DIV: elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); // get the mouse cursor position at startup: pos3 = e.clientX; pos4 = e.clientY; top$1.document.onmouseup = closeDragElement; // call a function whenever the cursor moves: top$1.document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; e.preventDefault(); // calculate the new cursor position: pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; // set the element's new position: elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; } function closeDragElement() { // stop moving when mouse button is released: top$1.document.onmouseup = null; top$1.document.onmousemove = null; } } // containsCheckElem 检查是否模板内元素,是就不移除 function removeTemplate(elemId, containsCheckElem = false) { const temp = top$1.document.getElementById(elemId); if (temp && (containsCheckElem === false || temp.contains(containsCheckElem) === false)) { temp.classList.remove(elemId + '-show'); setTimeout(function () { if (temp.classList.contains(elemId + '-show') === false && temp.parentElement) { top$1.document.body.removeChild(temp); } }, 500); } } function createFeedback() { let html = ` 用户反馈

反馈意见

若出现故障请先尝试升级脚本,若依然出现故障请反馈给我们,我们将尽快处理

`; return html; } function createFrameSetting() { let html = `
悬浮问答图标

打开后划词自动打开问答窗口进行回答,否则鼠标右下角显示问答图标

同时按下键盘A,然后框选指定的内容进行问答,用于解决某些网页无法复制选中问题
解除限制
打开后可解除部分网站的禁止划词限制,如冲突可关闭此功能(刷新页面后生效)
搜索窗口

打开后搜索窗口可固定在浏览器窗口特定位置,不受页面滚动影响

打开后将会将搜题窗口悬浮在最外层iframe,可能某些网站无法正常显示搜题窗口,否则将会在本iframe显示搜题窗口,若限制窗口无法移动到自定义的位置时可打开此开关

`; return html; } /** * 解除限制 */ function relieveLimit() { start(); if (location.host.indexOf('chaoxing') !== -1) { setTimeout(() => { try { _self.UEDITOR_CONFIG.scaleEnabled = false; } catch (e) { } // $.each(UE.instants, function () { // var key = this.key; // this.ready(function () { // this.destroy(); // UE.getEditor(key); // }); // }); }, 2000); } if ((window.location.href.includes("newMooc=true") && location.host.indexOf('chaoxing') !== -1) || location.pathname.indexOf('exam/test/reVersionPaperMarkContentNew') !== -1) { setTimeout(() => { $("body").removeAttr("onselectstart"); $("html").css("user-select", "unset"); try { UE.EventBase.prototype.fireEvent = function () { return null }; } catch (e) { } }, 2000); } } const ks = new kscreenshot({ // 设置为立即开始模式 immediately: false, // 需要下载 needDownload: false, // 工具栏配置 toolShow: { complete: true, quit: true, back: false, arrow: false, drawLine: false, rect: false, ellipse: false, text: false, color: false }, // 结束回调 endCB: function(data) { // 如果有截图数据,自动触发下载 if (data) { addModal2(createFrameLoading(), false); searchWord("",data).then(res => { addModal2(res, false, false); }); // console.log(data); } } }); // 添加快捷键支持:按下 Alt + A 开始截图 document.addEventListener('keydown', (e) => { if (e.key.toLowerCase() === 'a') { ks.startScreenShot(); } }); function generateRandomString(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } // 调用函数生成长度为6-10的随机字符串 var randomString = generateRandomString(Math.floor(Math.random() * 5) + 6); // console.log(randomString); //主程序 var HcSearch = function () { var transIconBase64 = "data:image/webp;base64,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"; var $doc = $(document); var $body = $("html body"); var randomCode = "yyMM000000"; //属性随机码,年月加六位随机码。用于元素属性后缀,以防止属性名称重复。 var createHtml = function () { var wordTransIconHtml = StringFormat('
', randomCode, transIconBase64); $body.append(StringFormat('
', randomCode) + wordTransIconHtml + '
'); }; var createStyle = function () { //尽可能避开csp认证 GM_addStyle(`#hcSearchePopover,#hcSearcheModal,#hcSearchePopover.hcSearchePopover,#hcSearcheModal.hcSearcheModal{all:initial;position:absolute;z-index:2147483647;display:block;font-size:14px;color:#333333;line-height:26px;transform:scale(0.9);opacity:0;transition:transform 0.1s ease-out,opacity 0.1s ease-out;}#hcSearchePopover.hcSearchePopover-show,#hcSearcheModal.hcSearcheModal-show{transform:scale(1);opacity:1;}#hcSearcheModal #hcSearcheModalContent{background:#f6f8fa;border:1px solid #d1d5da;border-radius:3px;color:#586069;display:block;box-shadow:0 16px 100px 0 rgba(0,0,0,0.2);}#hcSearcheModal #hcSearcheModalBody{margin-left:auto;margin-right:auto;position:relative;width:390px;background-color:#fff;border:1px solid #d1d5da;border-width:1px 0;border-radius:3px;}#hcSearcheModal #hcSearcheIframe{overflow:hidden;margin:0;padding:0;height:550px;}#hcSearcheModal #hcSearcheModalHeader{font-size:13px;line-height:24px;padding:6px 12px;color:#586069;}#hcSearcheModal #hcSearcheModalHeader::after{display:block;clear:both;content:"";}#hcSearcheModal #hcSearcheModalFooter{min-height:10px;cursor:move;position:relative;display:flex; justify-content: center;}#hcSearcheModal #hcSearcheModalLinks{float:right}#hcSearcheModal #hcSearcheModalLinks hcsearche-link{display:inline-block;color:#24292e;margin:0 0 0 6px;font-size:13px;font-weight:normal;text-decoration:none;cursor:pointer;padding:0 0.5em;border-radius:0;}#hcSearcheModal #hcSearcheModalLinks hcsearche-link[data-securrent=true],#hcSearcheModal #hcSearcheModalLinks hcsearche-link:hover{background:rgba(27,31,35,.08);color:#444d56;}#hcSearcheModal #hcSearcheModalLinks hcsearche-link>svg{vertical-align:sub;padding-left:4px;}#hcSearcheModal #hcSearcheModalLinks #hcSearcheClose:hover{background:rgba(0,0,0,0.05);}#hcSearcheModal #hcSearcheModalLock{float:left;display:block;opacity:0.3;margin-top:3px;width:20px;height:20px;background-size:20px;background-position:center;background-repeat:no-repeat;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMSAxMHYtNGMwLTIuNzYtMi4yNC01LTUtNXMtNSAyLjI0LTUgNXYyaC0xdi0yYzAtMy4zMTIgMi42ODktNiA2LTZzNiAyLjY4OSA2IDZ2NGgxMHYxNGgtMTh2LTE0aDd6bTEwIDFoLTE2djEyaDE2di0xMnoiLz48L3N2Zz4=);}#hcSearcheModal #hcSearcheModalLock.hcSearcheModalLocked{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik02IDZjMC0zLjMxMSAyLjY4OS02IDYtNnM2IDIuNjg4IDYgNnY0aDN2MTRoLTE4di0xNGgzdi00em0xNCA1aC0xNnYxMmgxNnYtMTJ6bS0xMy01djRoMTB2LTRjMC0yLjc2LTIuMjQtNS01LTVzLTUgMi4yNC01IDV6Ii8+PC9zdmc+)}#hcSearcheModal #hcSearcheNextLink{position:absolute;top:-40px;right:28px;display:block;width:32px;height:32px;color:#6c757d;cursor:pointer;background-size:16px;background-position:center;background-repeat:no-repeat;background-color:#f6f8fa;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA4UlEQVQ4T+2TTUoDQRCF32twTpCLuFKYEaYWguvoGQS3nsFjeAYXEoIQ6JqF1wi6Sly48wBPGpzQtpNJyMJVetm8+urvFTHyYoy3IYS3tm0X22QcA7j7A4B3M3s8Av5rBu4+MbPPfuJDWyg1mzVKCu6+InljZq8JUgK6rruTNDWzyz7JLx/EGM8APJO8TpAc8BN8D+DCzD4GAekzhwC4SkYieSLpT3DSDzoxQUjOJM1DCEHSeZl5awXZABtJLyS/AJzmZee23nULTVVV67qulwfdwtihbVpw9wjA9hGXGklP3z4VgPj5LnZPAAAAAElFTkSuQmCC);border-radius:3px;}#hcSearcheModal #hcSearcheNextLink:hover{background-color:#e9ecef;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA8ElEQVQ4T2NkwAMKCwvT/v37d3/ixIm7cSljxGdAQUFBCwMDw4MJEybMGTWAXmFQXFws0tvb+wYW4thiAV0NPBobGhqY3r9//4yBgSFk4sSJR0CGoBtQUFCQycDAEDRhwgRXmCUo6SA/P9+ckZFx0////4NBhiAbANVc9OvXL9tp06a9wGoASBDZEEZGRg9QQmJgYGBlYGDA0AxSjzUlQg3Z8v///20MDAxMjIyMFug243QBTCI/P9+GgYFhBwMDw+ffv38bIjsbOVnjzQvFxcU2TExMz7u7u++SlRfwZTS4F/Lz8/cxMjI6EqMYi5p1AJbtgw7fjyoMAAAAAElFTkSuQmCC);color:#444d56;}#hcSearcheModal #hcSearcheNextLink.hcSearcheNextLinkLoading{background-color:#e9ecef;background-image:none;}#hcSearcheModal #hcSearcheNextLink.hcSearcheNextLinkLoading:after{content:" ";display:block;width:12px;height:12px;margin:9px 0 0 9px;border-radius:50%;border:1px solid #24292e;border-color:#24292e transparent #24292e transparent;animation:hcSearcheNextLinkLoading 1.2s linear infinite;}@keyframes hcSearcheNextLinkLoading{0%{transform:rotate(0deg);}50%{transform:rotate(180deg);}100%{transform:rotate(720deg);}}.JPopBox-tip-white{z-index:1060;min-width:50px;max-width:300px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;color:#333;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.JPopBox-tip-white .JPopBox-tip-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;font-weight:500;line-height:1.1;color:inherit}.JPopBox-tip-white .JPopBox-tip-content{padding:9px 14px}.JPopBox-tip-white .JPopBox-tip-arrow,.JPopBox-tip-white .JPopBox-tip-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px;content:""}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-top{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:rgba(0,0,0,.25);bottom:-11px}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-top:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-right{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:rgba(0,0,0,.25)}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-right:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-bottom{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,.25);top:-11px}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-bottom:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-left{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:rgba(0,0,0,.25)}.JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-left:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.JPopBox-tip-white{width: 482px;max-width: 550px;min-width: 450px;}`); var s = ""; s += StringFormat(".wordTrans{0}{box-sizing: content-box;cursor: pointer;z-index: 2147483647;border-width: 0px;border-style: solid;border-image: initial;border-radius: 5px;padding: 0.5px;position: absolute;display: none}", randomCode); s += StringFormat(".wordTransIcon{0}{background-image: url({1});background-size: 50px;height: 50px;width: 50px;}", randomCode, transIconBase64); s += Panel.CreateStyle(); GM_addStyle(s); }; var ShowWordTransIcon = function () { var wordTransIcon = document.getElementById(randomString + randomCode + 'icon'); var isSelect = false; var isPanel = false; var isWordTransIcon = false; $doc.on({ "selectionchange": function (e) { isSelect = true; }, "mousedown": function (e) { var $targetEl = $(e.target); isPanel = $targetEl.parents().is("div.JPopBox-tip-white"); isWordTransIcon = $targetEl.parents().is(StringFormat("div#" + randomString + "{0}", randomCode)); //点击划词图标外域和划词面板外域时,隐藏图标和划词面板 if (!isWordTransIcon && !isPanel) { wordTransIcon.style.display = "none"; Panel.Destroy(); } else { //点击划词图标,取消鼠标默认事件,防止选中的文本消失 if (isWordTransIcon) { ClearBubble(e); } } }, "mouseup": function (e) { var selectText = window.getSelection().toString().trim(); if (!isPanel && isSelect && selectText) { if (!SearchPanel.getOptions().auto_search) { wordTransIcon.style.display = 'block'; wordTransIcon.style.left = e.pageX + 'px'; wordTransIcon.style.top = (e.pageY + 12) + 'px'; } else { //选中的文本内容 SearchPanel.show(selectText); } isSelect = false; } } }); wordTransIcon.addEventListener("click", function (e) { // GetSettingOptions(); //如果不是自动搜索的话,就显示出来搜索按钮,然后让用户点击 if (!SearchPanel.getOptions().auto_search) { Panel.Destroy(); SearchPanel.show(); wordTransIcon.style.display = "none"; e.stopPropagation(); } }); }; // var guid=""; var RegMenu = function () { GM_registerMenuCommand("文本答题", function () { SearchPanel.showWordSearch(); }); GM_registerMenuCommand("设置", function () { SearchPanel.setting(); }); }; this.init = function () { randomCode = DateFormat(new Date(), "yyMM").toString() + (Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000).toString(); createStyle(); createHtml(); ShowWordTransIcon(); SearchPanel.init(); RegMenu(); // reportOnline(); //此处是我注释掉的,因为似乎这个函数只是测试了一下服务器是否正常 }; }; var hcSearch = new HcSearch(); hcSearch.init(); })();