// ==UserScript== // @name 解除网站不允许复制的限制(优化版)🔥🔥🔥 // @description 解除部分网站不允许复制的限制,文本选中后点击复制按钮即可复制,主要用于:百度文库|道客巴巴|腾讯文档|豆丁网|无忧考网|学习啦|蓬勃范文|思否社区|力扣|知乎|语雀|QQ文档|360doc|17k|CSDN等,在原脚本的基础上,优化了部分功能,如有补充请留言反馈~ // @namespace picassoTX_lifting_restrictions // @version 1.0.2 // @author WindrunnerMax,picassoTX // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAWtJREFUaEPtmeERwiAMhYuuo87QzqAr6LmF7RZeXcHO0M6grqPxaq2HnC0BA8IZ/woh33sJekEkkX9E5Pkn/wMwW21TAddd55hI3TgHzbk6ZCax0Q7MlxswCWy/1gwCBbBYbXKA5Km+fWr4nXiIoACESApZKBCT7HLcN2PgQQG0CT86DG51n7QOIjiAVvHuwsBBvAHIjSqT++oBVe35cl33N15bXqdjmavlFDRAm6wOIngAHURQANhr9lyVr7wZAKsa5Tp2gFJNm1jsgKyarIaNmkN7xn48SR1ggAELvDlAWTbYWKQlhD2Uch0D8C2EqCdvTRz9NYoQk3wJNzG5pIYBSR2IvgcYgP8LSQr8erCF7WXSJsYeSrnOGECdVVImYxPLGKCbjvl64BhHUmekqMFWH9LXkPczAjQgpoX6XmAEYGO36z0M4FphXfxBB3QbXX8/9KChnssArpywcsBVMi7jol4pXSbwbezoAe60/xRPTdKM8AAAAABJRU5ErkJggg== // @match *://wenku.baidu.com/view/* // @match *://wenku.baidu.com/share/* // @match *://wenku.baidu.com/link* // @match *://wenku.baidu.com/aggs/* // @match *://wenku.baidu.com/ndPureView/* // @match *://www.51test.net/show/* // @match *://www.xuexi.la/* // @match *://www.xuexila.com/* // @match *://www.cspengbo.com/* // @match *://*.doc88.com/* // @match *://segmentfault.com/* // @match *://wk.baidu.com/view/* // @match *://leetcode-cn.com/problems/* // @match *://*.zhihu.com/* // @match *://z.30edu.com.cn/* // @match *://docs.qq.com/doc/* // @match *://docs.qq.com/sheet/* // @match *://boke112.com/post/* // @match *://*.yuque.com/* // @match *://www.commandlinux.com/* // @match *://*.diyifanwen.com/* // @match *://*.mbalib.com/* // @match *://*.cnitpm.com/* // @match *://bbs.mihoyo.com/ys/* // @match *://*.ruiwen.com/* // @match *://www.uemeds.cn/* // @match *://www.oh100.com/* // @match *://www.aiyuke.com/news/* // @match *://www.fwsir.com/* // @match *://www.wenxm.cn/* // @match *://www.unjs.com/* // @match *://www.ahsrst.cn/* // @match *://*.yjbys.com/* // @match *://*.qidian.com/* // @match *://*.zongheng.com/* // @match *://*.17k.com/* // @match *://*.ciweimao.com/* // @match *://book.qq.com/* // @match *://*.360doc.com/content/* // @match *://*.850500.com/news/* // @match *://utaten.com/lyric/* // @match *://*.jianbiaoku.com/* // @match *://*.kt250.com/* // @match *://www.kejudati.com/* // @match *://*.xiaohongshu.com/discovery/* // @match *://*.baibeike.com/* // @match *://*.blog.csdn.net/* // @match *://*.bilibili.com/read/* // @match *://*.cnki.net/KXReader/* // @match *://*.cnrencai.com/* // @match *://*.kodiplayer.cn/* // @match *://tongxiehui.net/* // @match *://*.jianshu.com/p/* // @match *://*.linovelib.com/novel/* // @match *://*.wjx.cn/* // @match *://*.wjx.top/* // @match *://*.chazidian.com/* // @match *://*.juejin.cn/post/* // @match *://*.zgbk.com/ecph/* // @match *://*.wenmi.com/article/* // @match *://yuedu.baidu.com/* // @match *://www.inrrp.com.cn/* // @match *://fanyi.baidu.com/mtpe/* // @match *://www.shubaoc.com/* // @match *://blog.51cto.com/* // @match *://www.ximalaya.com/* // @match *://*.tianqi.com/* // @match *://*.xiexiebang.com/* // @match *://*.docin.com/* // @match *://*.ddwk8.cn/* // @match *://*.php.cn/* // @match *://cooco.net.cn/* // @match *://fanqienovel.com/* // @match *://*.mobiletrain.org/* // @match *://*.examcoo.com/* // @match *://*.rrdynb.com/* // @match *://*.fuwu7.com/* // @match *://*.xiangqiqipu.com/* // @match *://note.youdao.com/* // @match *://*.163.com/* // @match *://*.aipiaxi.com/* // @match *://wenku.csdn.net/* // @match *://www.kdocs.cn/* // @match *://www.xiaoyuzhoufm.com/* // @match *://*.mcmod.cn/* // @supportURL https://github.com/WindrunnerMax/TKScript/issues // @license MIT // @orign-license MIT // @run-at document-start // @connect res3.doc88.com // @grant unsafeWindow // @grant GM_xmlhttpRequest // ==/UserScript== (function() { /** * 版权说明:原脚本https://github.com/WindrunnerMax/TKScript/ 采用MIT开源协议 * * MIT协议是一种开放源代码软件授权协议,全称为Massachusetts Institute of Technology License。 * 该协议允许自由地使用、复制、修改、合并、发布、分发、再授权和销售软件及其副本的任何部分。 * MIT协议要求在软件的所有副本中包含版权声明和许可声明 * * 特此声明! */ const DOM_STAGE = { START: "document-start", END: "document-end" }; const DOM_READY = "DOMContentLoaded"; const PAGE_LOADED = "load"; const MOUSE_UP = "mouseup"; const MOUSE_DOWN = "mousedown"; const MOUSE_MOVE = "mousemove"; const COPY = "copy"; const SELECT_START = "selectstart"; const CONTEXT_MENU = "contextmenu"; const KEY_DOWN = "keydown"; const commonUtils = { isString: function(value) { return Object.prototype.toString.call(value) === "[object String]"; } } const domUtils = { query: function(selector) { return document.querySelector(selector); }, attr: function(selector, attr, value) { const dom2 = document.querySelector(selector); dom2 && dom2.setAttribute(attr, value); }, append: function(selector, content) { const container = document.createElement("div"); if (commonUtils.isString(content)) { container.innerHTML = content; } else { container.appendChild(content); } const targetDOM = document.querySelector(selector); targetDOM && targetDOM.append(container); return container; }, remove: function(selector) { const targetDOM = document.querySelector(selector); targetDOM && targetDOM.remove(); } }; const initBaseEvent = (websiteConfig) => { window.addEventListener(DOM_READY, () => { if (websiteConfig.initCopyEvent) { document.oncopy = (e) => e.stopPropagation(); document.body.oncopy = (e) => e.stopPropagation(); document.addEventListener(COPY, (e) => e.stopPropagation()); document.body.addEventListener(COPY, (e) => e.stopPropagation()); } }); }; const initBaseStyle = () => { var copy_btn_css = ` .__copied-button { align-items:center; background: rgba(0, 0, 0); border-radius:3px; color:#fff; cursor:pointer; display:flex; font-size:12px; padding:4px 10px; justify-content:center; opacity:0; position:absolute; transition:opacity .3s; z-index:-1000; } `; var otner_css = ` #select-tooltip, #sfModal, .modal-backdrop, div[id^=reader-helper] { display:none!important } .modal-open { overflow:auto!important } ._sf_adjust_body { padding-right:0!important } `; window.addEventListener(DOM_READY, () => { domUtils.append("head", ``); domUtils.append("head", ``); }); }; /*! * 外部引用`static.doc88.com`声明 * 此部分是在处理`doc88.com`才会加载的资源文件,此资源文件由该网站加载时提供 */ let path = ""; const website_rule_doc88 = { regexp: /.*doc88\.com\/.+/, init: () => { domUtils.append( "body", `` ); GM_xmlhttpRequest({ method: "GET", url: "https://res3.doc88.com/resources/js/modules/main-v2.min.js?v=2.56", onload: function(response) { const result = /\("#cp_textarea"\).val\(([\S]*?)\);/.exec(response.responseText); if (result) { path = result[1]; } } }); window.addEventListener("load", () => { const cpFn = unsafeWindow.copyText.toString(); const fnResult = /'\+([\S]*?)\+"<\/textarea>/.exec(cpFn); if (fnResult) { path = fnResult[1]; } }); }, getSelectedText: () => { let select = unsafeWindow; path.split(".") .forEach((v) => { select = select[v]; }); if (!select) { unsafeWindow.Config.vip = 1; unsafeWindow.Config.logined = 1; domUtils.remove("#copy-element-hide"); } return select; } }; const website_rule_segmentfault = { regexp: /.*segmentfault\.com\/.+/, init: function() { const body = domUtils.query("body"); if (body) { body.classList.add("_sf_adjust_body"); body.onclick = () => { body.style.paddingRight = "0"; }; } } }; const TEXT_PLAIN = "text/plain"; const TEXT_HTML = "text/html"; const downgradeCopy = (data) => { const textarea = document.createElement("textarea"); textarea.addEventListener( COPY, (event) => { for (const [key, value] of Object.entries(data)) { event.clipboardData && event.clipboardData.setData(key, value); } event.stopPropagation(); event.preventDefault(); }, true ); textarea.style.position = "fixed"; textarea.style.left = "-999px"; textarea.style.top = "-999px"; textarea.value = data[TEXT_PLAIN]; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); document.body.removeChild(textarea); }; const isEmptyContent = (data) => { if (!data){ return true; } return commonUtils.isString(data) ? !data : !data[TEXT_PLAIN]; }; const copy = (data) => { const params = commonUtils.isString(data) ? { [TEXT_PLAIN]: data } : data; const plainText = params[TEXT_PLAIN]; if (!plainText){ return false; } if (navigator.clipboard && window.ClipboardItem) { const dataItems = {}; for (const [key, value] of Object.entries(params)) { const blob = new Blob([value], { type: key }); dataItems[key] = blob; } navigator.clipboard.write([new ClipboardItem(dataItems)]) .catch(() => { downgradeCopy(params); }); } else { downgradeCopy(params); } return true; }; let dom = null; let isReadyToHidden = false; const instance = { id: "__copied", className: "__copied-button", init: function(name) { const container = document.createElement("div"); container.id = this.id; container.className = this.className; container.innerText = name || "复制"; container.addEventListener("mouseup", (e) => e.stopPropagation(), true); container.addEventListener("mousedown", (e) => e.stopPropagation(), true); dom = container; document.body.appendChild(dom); }, getInstance: function() { if (dom === null) { this.init(); } return dom; }, show: function(event) { if (isReadyToHidden){ return void 0; } const dom2 = this.getInstance(); dom2.style.left = `${event.pageX + 10}px`; dom2.style.top = `${event.pageY + 10}px`; dom2.style.opacity = "0.8"; dom2.style.zIndex = "99999"; }, hide: function(keep = 350) { const dom2 = this.getInstance(); dom2.style.opacity = "0"; if (keep) { isReadyToHidden = true; setTimeout(() => { dom2.style.zIndex = "-10000"; isReadyToHidden = false; }, keep); } }, onCopy: function(content, event) { const dom2 = this.getInstance(); this.show(event); dom2.onclick = () => { copy(content); this.hide(); }; }, enable: function() { const dom2 = this.getInstance(); dom2.style.display = "flex"; }, disable: function() { const dom2 = this.getInstance(); dom2.style.display = "none"; }, destroy: function() { const el = this.getInstance(); el.remove(); dom = null; } }; const stopNativePropagation = (event) => { event.stopPropagation(); }; const utils = { hideButton: () => { instance.disable(); }, showButton: () => { instance.enable(); }, removeAttributes: (selector, attr = []) => { const dom = isString(selector) ? document.querySelector(selector) : selector; dom && attr.forEach((item) => dom.removeAttribute(item)); }, enableUserSelectByCSS: () => { const css = "*{user-select: auto !important;-webkit-user-select: auto !important;}"; const style = document.createElement("style"); style.innerText = css; const head = document.getElementsByTagName("head")[0]; if (head) { head.appendChild(style); } else { window.addEventListener( PAGE_LOADED, () => document.getElementsByTagName("head")[0].appendChild(style) ); } }, enableOnSelectStart: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(SELECT_START, stopNativePropagation); }, enableOnContextMenu: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(CONTEXT_MENU, stopNativePropagation); }, enableOnCopy: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(COPY, stopNativePropagation); }, enableOnKeyDown: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(KEY_DOWN, (e) => { if (e.key === "c" && e.ctrlKey) return e.stopPropagation(); }); }, enableOnSelectStartByCapture: () => { window.addEventListener(SELECT_START, stopNativePropagation, true); document.addEventListener(SELECT_START, stopNativePropagation, true); }, enableOnContextMenuByCapture: () => { window.addEventListener(CONTEXT_MENU, stopNativePropagation, true); document.addEventListener(CONTEXT_MENU, stopNativePropagation, true); }, enableOnCopyByCapture: () => { window.addEventListener(COPY, stopNativePropagation, true); document.addEventListener(COPY, stopNativePropagation, true); }, enableOnKeyDownByCapture: () => { document.addEventListener( KEY_DOWN, (e) => e.ctrlKey && e.key.toLocaleUpperCase() === "C" && e.stopPropagation(), true ); } }; const website_rule_wenku$baidu = { regexp: /.*wk\.baidu\.com\/view\/.+/, init: function() { utils.hideButton(); utils.enableOnSelectStartByCapture(); window.onload = () => { domUtils.attr(".sf-edu-wenku-vw-container", "style", ""); }; } }; const website_rule_zhihu = { regexp: /.*zhihu\.com\/.*/, init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); if (location.hostname === "zhuanlan.zhihu.com") { const removeFocalPointModal = (mutationsList) => { for (const mutation of mutationsList) { const addedNodes = mutation.addedNodes; for (let i = 0; i < addedNodes.length; i++) { const target = addedNodes[i]; if (target.nodeType != 1) return void 0; if (target instanceof HTMLDivElement && target.querySelector("[data-focus-scope-start]")) { const element = target.querySelector("[data-focus-scope-start]"); element && element.parentElement && element.parentElement.textContent && element.parentElement.textContent.indexOf("立即登录/注册") > -1 && element.parentElement.parentElement && element.parentElement.parentElement.removeChild(element.parentElement); } } } }; const observer = new MutationObserver(removeFocalPointModal); observer.observe(document, { childList: true, subtree: true }); } } }; const website_rule_30edu = { regexp: /.*30edu\.com\.cn\/.+/, init: function() { window.onload = () => { var _a; const iframes = document.getElementsByTagName("iframe"); if (iframes.length === 2) { const body = (_a = iframes[1].contentWindow) == null ? void 0 : _a.document.querySelector("body"); body && utils.removeAttributes(body, ["oncopy", "oncontextmenu", "onselectstart"]); } }; } }; const website_rule_docs$qq = { regexp: /.*docs\.qq\.com\/.+/, config: { initCopyEvent: false, captureInstance: true, delay: 100 }, init: function() { window.onload = () => { utils.hideButton(); }; }, getSelectedText: function() { var _a; if (unsafeWindow.pad && unsafeWindow.pad.editor && !unsafeWindow.pad.editor.isCopyable()) { utils.showButton(); const editor = unsafeWindow.pad.editor; if (editor.getCopyContent) { const content = editor.getCopyContent() || {}; const plainText = content.plain || ""; const htmlText = content.html || ""; return { [TEXT_PLAIN]: plainText, [TEXT_HTML]: htmlText }; } else { editor._docEnv.copyable = true; editor.clipboardManager.copy(); const plainText = editor.clipboardManager.customClipboard.plain || ""; const htmlText = editor.clipboardManager.customClipboard.html || ""; editor._docEnv.copyable = false; return { [TEXT_PLAIN]: plainText, [TEXT_HTML]: htmlText }; } } else if (unsafeWindow.SpreadsheetApp && unsafeWindow.SpreadsheetApp.permissions && unsafeWindow.SpreadsheetApp.permissions.sheetStatus && unsafeWindow.SpreadsheetApp.permissions.sheetStatus.canCopy === false && unsafeWindow.SpreadsheetApp.permissions.sheetStatus.canEdit && unsafeWindow.SpreadsheetApp.permissions.sheetStatus.canEdit() === false) { utils.showButton(); const SpreadsheetApp = unsafeWindow.SpreadsheetApp; const [selection] = SpreadsheetApp.view.getSelectionRanges(); if (selection) { const text = []; const { startColIndex, startRowIndex, endColIndex, endRowIndex } = selection; for (let i = startRowIndex; i <= endRowIndex; i++) { for (let k = startColIndex; k <= endColIndex; k++) { const cell = SpreadsheetApp.workbook.activeSheet.getCellDataAtPosition(i, k); if (!cell) continue; text.push(" ", ((_a = cell.formattedValue) == null ? void 0 : _a.value) || cell.value || ""); } i !== endRowIndex && text.push("\n"); } const str = text.join(""); return /^\s*$/.test(str) ? "" : str; } return ""; } return ""; } }; const website_rule_boke112 = { regexp: new RegExp(".+://boke112.com/post/.+"), init: function() { utils.enableOnCopyByCapture(); const template = ` `; domUtils.append("head", template); } }; const website_rule_diyifanwen = { regexp: /diyifanwen/, init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); utils.enableOnKeyDownByCapture(); } }; const website_rule_mbalib = { regexp: /mbalib/, init: function() { window.onload = () => { utils.removeAttributes("fullScreenContainer", ["oncopy", "oncontextmenu", "onselectstart"]); }; } }; const website_rule_cnitpm = { regexp: /cnitpm/, init: function() { utils.hideButton(); window.onload = () => { utils.removeAttributes("body", ["oncopy", "oncontextmenu", "onselectstart"]); }; } }; const website_rule_mihoyo = { regexp: new RegExp(".+bbs.mihoyo.com/.+"), init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); utils.enableOnSelectStartByCapture(); utils.enableUserSelectByCSS(); } }; const website_rule_uemeds = { regexp: new RegExp(".+www.uemeds.cn/.+"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); } }; const website_rule_aiyuke = { regexp: new RegExp(".+aiyuke.com/news/.+"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); } }; const website_rule_qidian = { regexp: new RegExp("qidian"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopy(".main-read-container"); utils.enableOnContextMenu(".main-read-container"); } }; const website_rule_zongheng = { regexp: new RegExp("zongheng"), init: function() { utils.removeAttributes(".reader_box", ["style", "unselectable", "onselectstart"]); utils.removeAttributes(".reader_main", ["style", "unselectable", "onselectstart"]); utils.hideButton(); utils.enableOnKeyDown("body"); utils.enableUserSelectByCSS(); utils.enableOnCopy(".content"); utils.enableOnContextMenu("body"); utils.enableOnSelectStart(".content"); } }; const website_rule_17k = { regexp: new RegExp("17k"), init: () => { utils.hideButton(); utils.enableOnCopy(".readAreaBox .p"); } }; const website_rule_ciweimao = { regexp: new RegExp("ciweimao"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopy("#J_BookCnt"); utils.enableOnContextMenu("body"); utils.enableOnSelectStart("#J_BookCnt"); } }; const website_rule_book$qq = { regexp: new RegExp("book\\.qq"), init: function() { utils.hideButton(); utils.enableOnCopy("body"); utils.enableUserSelectByCSS(); utils.enableOnContextMenu("body"); utils.enableOnSelectStart("body"); } }; const website_rule_utaten = { regexp: new RegExp("utaten"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnSelectStartByCapture(); } }; const website_rule_wenku$baidu_2 = { config: { runAt: "document-start" }, regexp: new RegExp("wenku.baidu.com/(view|link|aggs).*"), init: function() { domUtils.append("head", ``); let canvasDataGroup = []; const originObject = { context2DPrototype: unsafeWindow.document.createElement("canvas") .getContext("2d") .__proto__ }; document.createElement = new Proxy(document.createElement, { apply: function(target, thisArg, argumentsList) { const element = Reflect.apply(target, thisArg, argumentsList); if (argumentsList[0] === "canvas") { const tmpData = { canvas: element, data: [] }; element.getContext("2d") .fillText = function(...args) { tmpData.data.push(args); originObject.context2DPrototype.fillText.apply(this, args); }; canvasDataGroup.push(tmpData); } return element; } }); let pageData = {}; Object.defineProperty(unsafeWindow, "pageData", { set: (v) => pageData = v, get: function() { if (!pageData.vipInfo) return pageData.vipInfo = {}; pageData.vipInfo.global_svip_status = 1; pageData.vipInfo.global_vip_status = 1; pageData.vipInfo.isVip = 1; pageData.vipInfo.isWenkuVip = 1; return pageData; } }); const templateCSS = [ "" ].join(""); const render = () => { canvasDataGroup = canvasDataGroup.filter((item) => item.canvas.id); const templateText = canvasDataGroup.map((canvasData, index) => { const computedTop = index * Number(canvasData.canvas.clientHeight); const textItem = canvasData.data.map( (item) => `
${item[0]}
` ); return textItem.join(""); }); const templateHTML = [ "
", "
", "
", "
请自行复制
", "
关闭
", "
", "
", templateText.join(""), "
", "
", "
" ].join(""); domUtils.append("body", templateHTML); domUtils.append("body", templateCSS); const closeButton = document.querySelector("#copy-template-html #template-close"); const close = () => { domUtils.remove("#copy-template-html"); domUtils.remove("#copy-template-css"); closeButton && closeButton.removeEventListener("click", close); }; closeButton && closeButton.addEventListener("click", close); }; document.addEventListener("DOMContentLoaded", () => { domUtils.append( "head", `` ); domUtils.append("body", "
复制
"); const btn = domUtils.query("#copy-btn-wk"); btn && (btn.onclick = render); }); }, getSelectedText: () => { if (window.getSelection && (window.getSelection() || "") .toString()) { return (window.getSelection() || "") .toString(); } const result = /查看全部包含“([\s\S]*?)”的文档/.exec(document.body.innerHTML); if (result) return result[1]; return ""; } }; const website_rule_xiaohongshu = { regexp: new RegExp("xiaohongshu"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnKeyDownByCapture(); } }; const website_rule_leetcode = { regexp: new RegExp("leetcode"), init: function() { utils.hideButton(); utils.enableOnCopy("#lc-home"); } }; const website_rule_csdn = { regexp: /csdn/, init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); utils.enableUserSelectByCSS(); } }; const website_rule_bilibili = { regexp: new RegExp("bilibili"), init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); } }; const website_rule_cnki = { regexp: new RegExp("cnki"), init: function() { utils.hideButton(); utils.enableOnContextMenuByCapture(); utils.enableOnKeyDownByCapture(); utils.enableOnCopyByCapture(); } }; const website_rule_docin = { regexp: new RegExp("docin.com/.*"), config: { initCopyEvent: false, captureInstance: true, delay: 100 }, init: function() { window.addEventListener(PAGE_LOADED, () => { var _a; return (_a = domUtils.query("#j_select")) == null ? void 0 : _a.click(); }); domUtils.append("head", ""); }, getSelectedText: function() { if (unsafeWindow.docinReader && unsafeWindow.docinReader.st) { return unsafeWindow.docinReader.st; } return ""; } }; const website_rule_youdao = { config: { initCopyEvent: false }, regexp: /note\.youdao\.com\/newEditorV1\/bulb\.html.*/, init: function() { utils.hideButton(); if (window.parent && window.parent.location.href.indexOf("ynoteshare") > -1) { utils.enableUserSelectByCSS(); document.addEventListener(MOUSE_DOWN, stopNativePropagation, true); document.addEventListener(MOUSE_MOVE, stopNativePropagation, true); } } }; const website_rule_union = { regexp: new RegExp( [ "commandlinux", "cnki", "ruiwen", "oh100", "fwsir", "wenxm", "unjs", "ahsrst", "yjbys", "360doc", "850500", "jianbiaoku", "kt250", "kejudati", "baibeike", "yuque", "cnrencai", "kodiplayer", "tongxiehui", "ndPureView", "jianshu", "linovelib", "chazidian", "juejin", "zgbk", "wenmi", "yuedu\\.baidu", "inrrp", "shubaoc", "51cto", "ximalaya", "xiexiebang", "ddwk8", "php\\.cn", "fanqienovel\\.com/reader", "cooco\\.net\\.cn", "mobiletrain", "xiangqiqipu", "m\\.163\\.com", "aipiaxi", "wenku\\.csdn\\.net", "xiaoyuzhoufm\\.com", "mcmod\\.cn" ].join("|") ), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); } }; const website_rule_union_1 = { regexp: new RegExp(["wjx", "fanyi\\.baidu", "tianqi", "rrdynb", "fuwu7"].join("|")), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); utils.enableOnKeyDownByCapture(); utils.enableOnSelectStartByCapture(); utils.enableOnContextMenuByCapture(); } }; const website_rule_examcoo = { config: { runAt: DOM_STAGE.START }, regexp: new RegExp(["examcoo"].join("|")), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); utils.enableOnKeyDownByCapture(); utils.enableOnSelectStartByCapture(); utils.enableOnContextMenuByCapture(); } }; const website_rule_kdoc = { config: { runAt: DOM_STAGE.START }, regexp: new RegExp("kdocs"), init: function() { const patch = () => { unsafeWindow.APP && (unsafeWindow.APP.canCopy = () => true); }; if (unsafeWindow.APP) { patch(); } else { let APP = void 0; Object.defineProperty(unsafeWindow, "APP", { configurable: false, set: (value) => { APP = value; value && patch(); }, get: () => APP }); } } }; const websites = [ website_rule_segmentfault, website_rule_wenku$baidu, website_rule_zhihu, website_rule_30edu, website_rule_docs$qq, website_rule_boke112, website_rule_diyifanwen, website_rule_mbalib, website_rule_cnitpm, website_rule_mihoyo, website_rule_uemeds, website_rule_aiyuke, website_rule_qidian, website_rule_zongheng, website_rule_17k, website_rule_ciweimao, website_rule_book$qq, website_rule_utaten, website_rule_wenku$baidu_2, website_rule_xiaohongshu, website_rule_doc88, website_rule_leetcode, website_rule_csdn, website_rule_bilibili, website_rule_cnki, website_rule_docin, website_rule_youdao, website_rule_kdoc, website_rule_union, website_rule_union_1, website_rule_examcoo ]; let siteGetSelectedText = null; const initWebsite = () => { let websiteConfig = { initCopyEvent: true, runAt: DOM_STAGE.END, captureInstance: false, delay: 0 }; const mather = (regex, website) => { if (regex.test(window.location.href)) { if (website.config) websiteConfig = Object.assign(websiteConfig, website.config); if (websiteConfig.runAt === DOM_STAGE.END) { window.addEventListener(DOM_READY, () => website.init()); } else { website.init(); } if (website.getSelectedText){ siteGetSelectedText = website.getSelectedText; } return true; } return false; }; websites.some((website) => mather(website.regexp, website)); return websiteConfig; }; const getSelectedText = () => { if (siteGetSelectedText){ return siteGetSelectedText(); } if (window.getSelection){ return (window.getSelection() || "").toString(); } if (document.getSelection){ return (document.getSelection() || "").toString(); } if (document.selection){ return document.selection.createRange().text; } return ""; }; (function() { const websiteConfig = initWebsite(); initBaseEvent(websiteConfig); initBaseStyle(); window.addEventListener(MOUSE_UP, (e) => { const handler = () => { const content = getSelectedText(); if (isEmptyContent(content) || content==" ") { instance.hide(); return ""; } instance.onCopy(content, e); }; websiteConfig.delay ? setTimeout(handler, websiteConfig.delay) : handler(); }, websiteConfig.captureInstance ); })(); })();