// ==UserScript== // @name 123云盘剪贴板写入拦截 // @namespace https://tampermonkey.net/ // @version 1.2 // @description 在 123 云盘页面,彻底阻止任何JS向剪贴板写入内容 // @match *://*.123pan.cn/s/* // @match *://*.123pan.com/s/* // @match *://*.123684.com/s/* // @match *://*.123865.com/s/* // @match *://*.123912.com/s/* // @match *://*.123952.com/s/* // @match *://pan.quark.cn/s/* // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; // ----- 1. 拦截 navigator.clipboard(优雅降级)----- if (navigator.clipboard) { ['writeText', 'write'].forEach(method => { if (navigator.clipboard[method]) { Object.defineProperty(navigator.clipboard, method, { value: () => Promise.resolve(), // 伪装成功,避免报错 writable: false, configurable: false }); } }); } // ----- 2. 拦截 document.execCommand ----- const rawExec = document.execCommand?.bind(document); if (rawExec) { Object.defineProperty(document, 'execCommand', { value: function(cmd, ...args) { const c = String(cmd).toLowerCase(); if (c === 'copy' || c === 'cut') return false; return rawExec(cmd, ...args); }, writable: false, configurable: false }); } // ----- 3. 拦截 DataTransfer.setData ----- const rawSetData = DataTransfer.prototype.setData; DataTransfer.prototype.setData = function(type, data) { // 阻止剪贴板相关的 MIME 类型写入 if (type === 'text/plain' || type === 'text/uri-list' || type === 'text/html' || this.types?.includes('text/plain')) { return; } return rawSetData.call(this, type, data); }; // ----- 4. 拦截 copy/cut 事件(全部阻止)----- const handler = e => { e.preventDefault(); e.stopImmediatePropagation(); }; document.addEventListener('copy', handler, true); document.addEventListener('cut', handler, true); })();