您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
解决在输入法状态下按Enter键导致消息直接发送的问题;Solve the problem that pressing the Enter key in the input method state causes the message to be sent directly.
当前为
// ==UserScript== // @name 阻止claude输入发送 // @description 解决在输入法状态下按Enter键导致消息直接发送的问题;Solve the problem that pressing the Enter key in the input method state causes the message to be sent directly. // @match https://claude.ai/* // @author sinoftj // @version 1.0. // @namespace http://greasyfork.icu/users/1457414 // ==/UserScript== (function() { 'use strict'; // 输入法状态追踪 let imeActive = false; let lastImeEndTime = 0; const IME_BUFFER_TIME = 100; // 输入法结束后的缓冲时间(毫秒) // 检查是否处于输入法状态 function isInImeContext(e) { return imeActive || e.isComposing || e.keyCode === 229 || (Date.now() - lastImeEndTime < IME_BUFFER_TIME); } // 处理输入法事件 document.addEventListener('compositionstart', function() { imeActive = true; }, true); document.addEventListener('compositionend', function() { lastImeEndTime = Date.now(); setTimeout(() => { imeActive = false; }, IME_BUFFER_TIME); }, true); // 拦截Enter键事件 document.addEventListener('keydown', function(e) { if ((e.key === 'Enter' || e.keyCode === 13) && isInImeContext(e)) { e.stopImmediatePropagation(); e.preventDefault(); return false; } }, true); // 备份保护:keypress事件拦截 document.addEventListener('keypress', function(e) { if ((e.key === 'Enter' || e.keyCode === 13) && isInImeContext(e)) { e.stopImmediatePropagation(); e.preventDefault(); return false; } }, true); // 处理输入框元素 function protectInputElement(input) { const originalKeyDown = input.onkeydown; input.onkeydown = function(e) { if ((e.key === 'Enter' || e.keyCode === 13) && isInImeContext(e)) { e.stopPropagation(); e.preventDefault(); return false; } if (originalKeyDown) return originalKeyDown.call(this, e); }; } // 页面加载后处理现有输入框 window.addEventListener('load', function() { setTimeout(() => { document.querySelectorAll('textarea, input[type="text"]').forEach(protectInputElement); // 监控DOM变化,处理新添加的输入框 if (window.MutationObserver) { const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.addedNodes && mutation.addedNodes.length > 0) { mutation.addedNodes.forEach((node) => { if (node.nodeType === 1) { if (node.tagName === 'TEXTAREA' || (node.tagName === 'INPUT' && node.type === 'text')) { protectInputElement(node); } const inputs = node.querySelectorAll ? node.querySelectorAll('textarea, input[type="text"]') : []; if (inputs.length > 0) { inputs.forEach(protectInputElement); } } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } }, 1000); }); })();