// ==UserScript== // @name 【最强】【最全面】【全网页可用】【持续更新中】解除禁止复制和粘贴限制并支持手动粘贴 // @namespace http://jiangning_sama/pojie_cpoy.net/ // @version 7.3.2 // @description ⭐学习通⭐pta⭐csdn⭐飞书云文档⭐破解所有网站【禁止复制】和【禁止粘贴】限制,支持【模拟人工输入】。安装后,打开目标网页即可解除限制。若粘贴解锁不生效,可以使用ctrl+m呼出浮动输入框进行模拟人工输入,详情请阅读下方说明。有疑问或者反馈都可以发我邮箱啊:2697003697@qq.com // @author 江宁sama // @match *://*/* // @exclude https://chatgpt.com/* // @exclude https://www.bilibili.com/* // @exclude https://www.bing.com/* // @exclude https://fanyi.*/* // @grant none // @run-at document-start // @license MIT // @downloadURL none // ==/UserScript== /* * 免责声明: * 本脚本为教育和学习用途而开发,旨在帮助用户了解网页元素的控制与交互操作。 * 使用本脚本即表示用户同意自行承担由此带来的一切风险和后果,开发者不对因使用本脚本 * 造成的任何直接或间接损失负责。 * * 请勿使用本脚本用于任何违反服务条款、侵害他人权益或违反当地法律法规的行为。 * 建议仅在个人测试环境中使用,不建议用于生产环境或未经授权的网页。 * * 使用前请务必仔细阅读本免责声明,开发者保留随时更改或终止该脚本的权利。 */ (function () { 'use strict'; // 环境判断 const isFeishuPage = /feishu\.cn|larkoffice\.com/.test(window.location.hostname); const isChaoxingPage = /chaoxing\.com/.test(window.location.hostname); // 通用工具函数 const utils = { /** * 移除VIP遮罩层 */ removeVipMask: () => { try { const masks = document.querySelectorAll('div[class*="hide-article"], div[class*="overlay"], div[class*="mask"]'); masks.forEach(mask => { mask.style.display = 'none'; mask.remove(); }); document.body.style.overflow = 'auto'; document.body.style.pointerEvents = 'auto'; } catch (e) { console.error('Failed to remove VIP mask:', e); } }, /** * 强制移除所有元素的样式限制 */ forceRemoveStyles: () => { try { document.querySelectorAll('*').forEach(el => { el.style.userSelect = 'auto'; el.style.pointerEvents = 'auto'; }); } catch (e) { console.error('Failed to remove styles:', e); } }, /** * 动态监听并移除VIP遮罩层 */ observeVipMask: () => { try { const observer = new MutationObserver(() => utils.removeVipMask()); observer.observe(document.body, { childList: true, subtree: true }); utils.removeVipMask(); } catch (e) { console.error('Failed to observe VIP mask:', e); } }, /** * 移除特定事件监听器 */ removeSpecificEventListeners: () => { try { ['copy', 'cut', 'paste', 'contextmenu', 'selectstart'].forEach(event => { document.body.addEventListener(event, e => e.stopImmediatePropagation(), true); }); } catch (e) { console.error('Failed to remove event listeners:', e); } }, /** * 解锁CSS限制 */ unlockCssRestrictions: () => { try { document.querySelectorAll('*:not([data-unlock-applied])').forEach(el => { el.style.userSelect = 'auto'; el.style.pointerEvents = 'auto'; el.setAttribute('data-unlock-applied', 'true'); }); } catch (e) { console.error('Failed to unlock CSS restrictions:', e); } }, /** * 拦截XHR请求并修改响应 */ interceptXHR: () => { try { const rawOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url, ...rest) { this.addEventListener('readystatechange', () => { if (this.readyState === 4) { try { const jsonResponse = JSON.parse(this.responseText); if (jsonResponse.data && jsonResponse.data.actions && jsonResponse.data.actions.copy !== 1) { jsonResponse.data.actions.copy = 1; Object.defineProperty(this, 'responseText', { value: JSON.stringify(jsonResponse) }); Object.defineProperty(this, 'response', { value: jsonResponse }); } } catch (e) { console.error('Failed to modify response:', e); } } }, false); rawOpen.call(this, method, url, ...rest); }; } catch (e) { console.error('Failed to intercept XHR:', e); } }, /** * 自定义复制处理 */ customCopyHandler: () => { try { document.addEventListener('keydown', e => { if (e.ctrlKey && e.key === 'c') { e.preventDefault(); e.stopPropagation(); try { document.execCommand('copy'); console.log("Content copied to clipboard!"); } catch (err) { console.error("Copy operation failed:", err); } } }, true); } catch (e) { console.error('Failed to set custom copy handler:', e); } }, /** * 创建浮动输入框 */ createFloatingInputBox: () => { try { if (document.getElementById('floatingInputBox')) return; const floatingBox = document.createElement('div'); floatingBox.id = 'floatingInputBox'; Object.assign(floatingBox.style, { position: 'fixed', top: '20px', right: '20px', width: '300px', padding: '10px', backgroundColor: 'white', border: '1px solid black', zIndex: '10000' }); const closeButton = document.createElement('button'); closeButton.textContent = '关闭'; closeButton.style.marginBottom = '10px'; closeButton.onclick = () => document.body.removeChild(floatingBox); const textarea = document.createElement('textarea'); Object.assign(textarea.style, { width: '100%', height: '80px' }); textarea.placeholder = '在此粘贴内容,然后按 Enter'; textarea.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); const text = textarea.value; document.body.removeChild(floatingBox); if (targetElement) { utils.typeTextSlowly(targetElement, text); } } else if (e.key === 'Escape') { document.body.removeChild(floatingBox); } }); floatingBox.appendChild(closeButton); floatingBox.appendChild(textarea); document.body.appendChild(floatingBox); textarea.focus(); } catch (e) { console.error('Failed to create floating input box:', e); } }, /** * 缓慢输入文本 */ typeTextSlowly: (element, text) => { try { let i = 0; function typeChar() { if (i < text.length) { utils.insertChar(element, text[i]); i++; requestAnimationFrame(typeChar); } } typeChar(); } catch (e) { console.error('Failed to type text slowly:', e); } }, /** * 插入字符 */ insertChar: (element, char) => { try { if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') { element.focus(); document.execCommand('insertText', false, char); } else if (element.isContentEditable) { element.focus(); document.execCommand('insertText', false, char); } } catch (e) { console.error('Failed to insert char:', e); } } }; // 飞书专用功能 const feishuScript = () => { try { const overrideEventListeners = () => { const rawAddEventListener = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function (type, listener, options) { if (['copy', 'contextmenu'].includes(type)) { rawAddEventListener.call(this, type, event => { event.stopImmediatePropagation(); if (type === 'contextmenu') { return listener(event); } }, options); return; } rawAddEventListener.call(this, type, listener, options); }; }; const overrideXHR = () => { utils.interceptXHR(); }; overrideEventListeners(); overrideXHR(); } catch (e) { console.error('Failed to execute feishu script:', e); } }; // 通用解锁功能 const universalUnlockScript = () => { try { utils.observeVipMask(); utils.removeSpecificEventListeners(); utils.unlockCssRestrictions(); utils.interceptXHR(); utils.customCopyHandler(); } catch (e) { console.error('Failed to execute universal unlock script:', e); } }; // 手动粘贴功能 let targetElement = null; document.addEventListener('keydown', function (event) { if (event.ctrlKey && event.key === 'm') { event.preventDefault(); targetElement = document.activeElement; utils.createFloatingInputBox(); } }); // 初始化 document.addEventListener('DOMContentLoaded', () => { try { if (isFeishuPage) { feishuScript(); } else { universalUnlockScript(); } } catch (e) { console.error('Failed to initialize script:', e); } }); })();