// ==UserScript== // @name 网页复制破解助手 // @namespace ack20a@gmail.com // @version 0.1 // @description 破解网页防复制限制,支持破解百度文库 (wk.baidu.com)、腾讯文档 (docs.qq.com) 和道客巴巴 (doc88.com) 等网站的文本复制。 // @author ack20 // @match *://*/* // @grant none // @run-at document-end // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; // 常量定义 const SCRIPT_NAME = "网页复制破解助手"; const SUPPORTED_DOMAINS = ["wk.baidu.com", "docs.qq.com", "doc88.com"]; const SUPER_COPY_CSS = ` #_copy { align-items: center; background: #4494d5; border-radius: 3px; color: #fff; cursor: pointer; display: flex; font-size: 13px; height: 30px; justify-content: center; position: absolute; width: 60px; z-index: 1000; } #select-tooltip,#sfModal,.modal-backdrop,div[id^=reader-helper]{ display: none !important; } .modal-open { overflow: auto !important; } ._sf_adjust_body { padding-right: 0 !important; } .enable_copy_btns_div { position: fixed; width: 154px; left: 10px; top: 45%; background: #e7f1ff; border: 2px solid #4595d5; font-weight: 600; border-radius: 2px; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; z-index: 5000; } .enable_copy_btns_logo { width: 100%; background: #4595d5; text-align: center; font-size: 12px; color: #e7f1ff; line-height: 30px; height: 30px; } .enable_copy_btns_btn { display: block; width: 128px; height: 28px; background: #7f5711; border-radius: 4px; color: #fff; font-size: 12px; border: 0; outline: 0; margin: 8px auto; font-weight: 700; cursor: pointer; opacity: 0.9; } .enable_copy_btns_btn:hover { opacity: 0.8; } .enable_copy_btns_btn:active { opacity: 1; } `; // 注入 CSS 样式 function injectCSS(css) { var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; (document.head || document.getElementsByTagName('head')[0]).appendChild(style); } // 检查当前域名是否受支持 function isDomainSupported() { return SUPPORTED_DOMAINS.some(domain => window.location.hostname.includes(domain)); } // 工具函数:移除网页中的复制限制事件 function removeCopyRestrictions(element) { ["copy", "cut", "contextmenu", "selectstart", "mousedown", "mouseup", "mousemove", "keydown", "keypress", "keyup"].forEach(event => { element.addEventListener(event, function (e) { e.stopPropagation(); e.stopImmediatePropagation && e.stopImmediatePropagation(); e.returnValue = true; }, { capture: true }); }); } // 通用破解逻辑 function genericCrack(domain, $){ // 显示悬浮复制按钮 $('body').on('mouseup', function (e) { const selection = window.getSelection().toString(); if (selection) { $('#_copy').remove(); // 移除已有的复制按钮 const copyButtonHtml = `
复制
`; $('body').append(copyButtonHtml); // 插入新的复制按钮 // 阻止按钮本身的事件冒泡 $('#_copy').on('mousedown mouseup', function (e) { e.stopPropagation(); }); // 使用 ClipboardJS 库实现复制功能 const clipboard = new ClipboardJS('#_copy'); clipboard.on('success', function (e) { $('#_copy').html('复制成功!'); setTimeout(function () { $('#_copy').fadeOut(1000); }, 1000); e.clearSelection(); // 清除选区 }); clipboard.on('error', function (e) { $('#_copy').html('复制失败!'); setTimeout(function () { $('#_copy').fadeOut(1000); }, 1000); e.clearSelection(); // 清除选区 }); } }); // 特定网站处理逻辑 switch (domain) { case 'wk.baidu.com': $('head').append(""); // 解决百度文库打印问题 $('body').addClass('_sf_adjust_body'); // 调整SegmentFault 页面 $('body').on('click', () => $('body').css('padding-right', 0)); break; case 'docs.qq.com': break; // 无特殊处理 case 'doc88.com': // 在脚本注入后执行复制 setTimeout(async () => { const getSelectedText = eval(localStorage.super_js_copy_doc88); // 获取复制函数 const text = await getSelectedText(); // 等待复制结果 navigator.clipboard.writeText(text) // 将结果写入剪贴板 .then(() => console.log(`${SCRIPT_NAME}: Doc88 文档已复制`)) .catch(err => console.error(`${SCRIPT_NAME}: Doc88 文档复制失败 - ${err}`)); }, 1000); break; } } // 加载 ClipboardJS 库 function loadClipboardJS() { if (typeof ClipboardJS === 'undefined') { var script = document.createElement("script"); script.src = 'https://cdn.jsdelivr.net/npm/clipboard@2.0.8/dist/clipboard.min.js'; document.getElementsByTagName("head")[0].appendChild(script); // 等待 ClipboardJS 加载完成后执行破解逻辑 script.onload = function () { if (isDomainSupported()) { const $ = jQuery || window.$; injectCSS(SUPER_COPY_CSS); removeCopyRestrictions(document.body); // 移除网页复制限制 genericCrack(window.location.hostname, $); } }; } } // 加载 jQuery 库 (如果未加载) function loadJQuery() { if (typeof jQuery === 'undefined') { var script = document.createElement("script"); script.src = 'https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js'; document.getElementsByTagName("head")[0].appendChild(script); // 等待 jQuery 加载完成后加载 ClipboardJS script.onload = loadClipboardJS; } else { loadClipboardJS(); } } // 初始化,加载必要的库 loadJQuery(); })();