您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
按 Ctrl 点击或长按页面元素即可复制其内容(支持 PC 和移动端)
当前为
// ==UserScript== // @name 万能复制插件(Ctrl点击+长按) // @namespace http://tampermonkey.net/ // @version 2.0 // @description 按 Ctrl 点击或长按页面元素即可复制其内容(支持 PC 和移动端) // @author You // @match *://*/* // @grant GM_setClipboard // ==/UserScript== (function () { 'use strict'; // 显示提示气泡 function showTip(text) { const tip = document.createElement('div'); tip.textContent = text; tip.style.cssText = ` position: fixed; top: 20px; right: 20px; background: #28a745; color: white; padding: 8px 16px; border-radius: 8px; font-size: 14px; z-index: 999999; box-shadow: 0 0 10px rgba(0,0,0,0.3); `; document.body.appendChild(tip); setTimeout(() => tip.remove(), 2000); } // 提取文本内容 function extractText(el) { const tag = el.tagName.toLowerCase(); if (tag === 'input' || tag === 'textarea') return el.value.trim(); return el.innerText?.trim() || el.textContent?.trim() || ''; } // 复制到剪贴板 function copy(text) { if (!text) return; if (navigator.clipboard) { navigator.clipboard.writeText(text).then(() => { showTip('已复制:' + text); }).catch(() => { GM_setClipboard(text); showTip('已复制(兼容):' + text); }); } else { GM_setClipboard(text); showTip('已复制'); } } // 判定是否是可复制标签 function isCopyableTag(tagName) { const tags = ['div', 'span', 'p', 'pre', 'code', 'td', 'input', 'textarea', 'li']; return tags.includes(tagName.toLowerCase()); } // Ctrl + 点击 复制逻辑 document.addEventListener('click', (e) => { if (!e.ctrlKey) return; let el = e.target; while (el && el !== document.body) { if (isCopyableTag(el.tagName)) { const text = extractText(el); if (text) { copy(text); break; } } el = el.parentElement; } }); // 长按复制逻辑(移动端) let timer = null; document.addEventListener('mousedown', (e) => { let el = e.target; while (el && el !== document.body) { if (isCopyableTag(el.tagName)) { timer = setTimeout(() => { const text = extractText(el); if (text) copy(text); }, 600); // 长按600ms触发 break; } el = el.parentElement; } }); document.addEventListener('mouseup', () => clearTimeout(timer)); document.addEventListener('mouseleave', () => clearTimeout(timer)); })();