您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动解除 textarea 上的复制、粘贴、拖拽和文本选择限制
当前为
// ==UserScript== // @name 智云学堂插件 // @namespace http://tampermonkey.net/ // @version 0.0.5 // @description 自动解除 textarea 上的复制、粘贴、拖拽和文本选择限制 // @author You // @match https://www.e100soft.com/aikc/*.asp // @icon https://www.google.com/s2/favicons?sz=64&domain=e100soft.com // @grant none // @license MIT // @run-at document-idle // ==/UserScript== (function() { 'use strict'; const textareaIds = ['messageInput', 'testNr']; // 定义需要移除的事件类型 const eventsToRemove = ['copy', 'paste', 'selectstart', 'dragover', 'drop']; /** * 覆盖事件处理程序,阻止默认行为并停止事件传播 * @param {HTMLElement} textarea - 目标 textarea 元素 */ function removeEventHandlers(textarea) { eventsToRemove.forEach(eventType => { // 移除内联事件处理程序 textarea[eventType] = null; // 添加捕获阶段的空事件监听器,阻止后续处理 textarea.addEventListener(eventType, function(event) { // 不调用 preventDefault 和 stopPropagation,允许默认行为 }, true); }); console.log(`已移除元素#${textarea.id}的事件监听器`); } /** * 拦截并允许默认行为,同时阻止事件进一步传播 * @param {HTMLElement} textarea - 目标 textarea 元素 */ function interceptEvents(textarea) { eventsToRemove.forEach(eventType => { textarea.addEventListener(eventType, function(event) { event.stopImmediatePropagation(); // 不调用 preventDefault,允许默认行为 }, true); }); console.log(`已拦截元素#${textarea.id}的事件`); } /** * 设置 textarea 元素,移除或拦截事件监听器,并添加内容变化监听 * @param {HTMLElement} textarea - 目标 textarea 元素 */ function setupTextarea(textarea) { if (textarea) { // 方法一:覆盖事件处理程序 removeEventHandlers(textarea); // 方法二:拦截事件并允许默认行为 interceptEvents(textarea); // 添加内容变化监听 textarea.addEventListener('input', function() { const textLength = textarea.value.length; window.time9 = textLength; console.log(`time9 已更新为: ${window.time9}`); }); console.log(`已配置元素#${textarea.id}`); } } /** * 初始化处理现有的 textarea 元素 */ function initializeTextareas() { textareaIds.forEach(id => { const textarea = document.getElementById(id); if (textarea) { setupTextarea(textarea); } }); } /** * 监听 DOM 变化,处理动态添加的 textarea 元素 */ function observeDOMChanges() { const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.tagName === 'TEXTAREA' && textareaIds.includes(node.id)) { setupTextarea(node); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); console.log('已开始监听 DOM 变化'); } // 执行初始化 initializeTextareas(); observeDOMChanges(); console.log('移除 textarea 事件监听器脚本已启动'); })();