您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows pasting using Ctrl+V on sites that block it and triggers formatting
- // ==UserScript==
- // @name Bypass Paste Restriction
- // @namespace http://tampermonkey.net/
- // @version 0.4
- // @description Allows pasting using Ctrl+V on sites that block it and triggers formatting
- // @author OpenAI (gpt-4o-mini-2024-07-18)
- // @author Yi-01.AI (Yi-01.AI) (v0.4)
- // @license MIT
- // @match *://*/*
- // @grant clipboardRead
- // @grant clipboardWrite
- // ==/UserScript==
- (function() {
- 'use strict';
- document.addEventListener('keydown', async function(event) {
- if (event.ctrlKey && event.key === 'v') {
- event.preventDefault(); // Prevent the default paste behavior
- try {
- // Use the Clipboard API to read the clipboard content
- const text = await navigator.clipboard.readText();
- const activeElement = document.activeElement;
- if (activeElement && (
- activeElement.tagName === 'INPUT' ||
- activeElement.tagName === 'TEXTAREA' ||
- activeElement.getAttribute('contenteditable') === 'true'
- )) {
- if (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA') {
- // For standard input and textarea fields
- const start = activeElement.selectionStart;
- const end = activeElement.selectionEnd;
- const newValue = activeElement.value.substring(0, start) + text + activeElement.value.substring(end);
- activeElement.value = newValue;
- activeElement.setSelectionRange(start + text.length, start + text.length);
- } else if (activeElement.getAttribute('contenteditable') === 'true') {
- // For contenteditable divs
- const selection = window.getSelection();
- if (selection.rangeCount > 0) {
- const range = selection.getRangeAt(0);
- range.deleteContents();
- const textNode = document.createTextNode(text);
- range.insertNode(textNode);
- range.collapse(false); // Collapse the selection to the end of the pasted text
- selection.removeAllRanges();
- selection.addRange(range);
- }
- }
- // Create and dispatch input event to trigger formatting
- const inputEvent = new Event('input', { bubbles: true });
- activeElement.dispatchEvent(inputEvent);
- // Create and dispatch change event to ensure any additional formatting logic runs
- const changeEvent = new Event('change', { bubbles: true });
- activeElement.dispatchEvent(changeEvent);
- }
- } catch (err) {
- console.error('Failed to read clipboard contents: ', err);
- }
- }
- });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址