您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
模仿edge浏览器之前的功能,ctrl+shift+x,鼠标框选内容,ctrl+c复制;ESC取消选择
// ==UserScript== // @name 智能复制 // @namespace http://tampermonkey.net/ // @version 2024-04-24 // @description 模仿edge浏览器之前的功能,ctrl+shift+x,鼠标框选内容,ctrl+c复制;ESC取消选择 // @author chenyg // @match *://*/* // @grant none // @license MIT // ==/UserScript== //框选框 let selectDiv //网页中所有的dom let allDomIndex //被选中的包含文字的dom let selectDom = new Set() let isDragging = false; // 快捷键 let ctrlKeyPressed = false; let shiftKeyPressed = false; let mouseDowning = false; let startX, startY; //加载css function loadStyle(css) { var style = document.createElement('style'); style.type = 'text/css'; style.rel = 'stylesheet'; //for Chrome Firefox Opera Safari style.appendChild(document.createTextNode(css)); //for IE //style.styleSheet.cssText = code; var head = document.getElementsByTagName('head')[0]; head.appendChild(style); } //标记被选中的元素 function markSelectDom() { if (!allDomIndex) { allDomIndex = []; document.querySelectorAll("body *").forEach(dom => { let {x, y} = dom.getBoundingClientRect(); allDomIndex.push([x, y, dom]) }) } let {left, top, width, height} = selectDiv.style left = parseInt(left) top = parseInt(top) width = parseInt(width) height = parseInt(height) allDomIndex.filter(item => { let x = item[0], y = item[1], dom = item[2] if (dom.children.length !== 0) { return false } if (!dom.innerText) { return false } return (x > (left)) && (x < (left + width)) && (y > (top)) && (y < (top + height)) }).forEach(item2 => { let dom = item2[2]; dom.classList.add("selectDom") selectDom.add(item2) }) } // 复制内容到剪贴板 function copyTextToClipboard() { let arr = Array.from(selectDom); arr.sort((a, b) => a[0] - b[0]).sort((a, b) => a[1] - b[1]) let str = "" let idx for (let item of arr) { let y = item[1] if (idx !== y) {//换行 str += "\r\n" idx = y } str += item[2].innerText.trim() + "\t" } console.log(str.trim()) navigator.clipboard.writeText(str.trim()) } (function () { 'use strict'; loadStyle(` .selectDiv { border: 4px dashed #4684e7; background: #add4ff4f; position: fixed; border-radius: 5px; z-index: 99999; display: none; } .selectDom { box-shadow: inset 0 0 2px 2px #00ceff; border-radius: 5px; } `); selectDiv = document.createElement("div"); selectDiv.classList.add("selectDiv"); document.body.append(selectDiv); window.addEventListener('keydown', (e) => { switch (e.key) { case 'Control': ctrlKeyPressed = true; case 'Shift': shiftKeyPressed = true; case 'x': if (ctrlKeyPressed && shiftKeyPressed) { isDragging = true } break case 'c': if (ctrlKeyPressed) { copyTextToClipboard(); } ctrlKeyPressed = false; shiftKeyPressed = false; isDragging = false; // 清理选中dom边框 selectDom.forEach(item => item[2].classList.remove("selectDom")) selectDom = new Set() selectDiv.style.display = "none" break case 'Escape': ctrlKeyPressed = false; shiftKeyPressed = false; isDragging = false; // 清理选中dom边框 selectDom.forEach(item => item[2].classList.remove("selectDom")) selectDom = new Set() selectDiv.style.display = "none" break } }); window.addEventListener('mousedown', (e) => { if (isDragging) { mouseDowning = true; selectDiv.style.display = "block" startX = e.clientX; startY = e.clientY; selectDiv.style.left = startX + "px" selectDiv.style.top = startY + "px" //不要透过选框选择文字 document.addEventListener('selectstart', e => e.preventDefault()); } }); window.addEventListener('mouseup', (e) => { isDragging = false; mouseDowning = false; selectDiv.style.display = "none"; }); document.addEventListener('mousemove', (e) => { if (isDragging && mouseDowning) { const endX = e.clientX; const endY = e.clientY; //右下框选 if ((endX >= startX) && (endY >= startY)) { let width = Math.abs(startX - endX) + "px"; let height = Math.abs(startY - endY) + "px"; selectDiv.style.width = width; selectDiv.style.height = height; } //右上框选 if ((endX >= startX) && (endY < startY)) { //起点上移 selectDiv.style.top = endY + "px"; let width = Math.abs(startX - endX) + "px"; let height = Math.abs(startY - endY) + "px"; selectDiv.style.width = width; selectDiv.style.height = height; } //左下框选 if ((endX < startX) && (endY > startY)) { //起点上移 selectDiv.style.left = endX + "px"; let width = Math.abs(startX - endX) + "px"; let height = Math.abs(startY - endY) + "px"; selectDiv.style.width = width; selectDiv.style.height = height; } //左上框选 if ((endX < startX) && (endY < startY)) { //起点上移,左移 selectDiv.style.left = endX + "px"; selectDiv.style.top = endY + "px"; let width = Math.abs(startX - endX) + "px"; let height = Math.abs(startY - endY) + "px"; selectDiv.style.width = width; selectDiv.style.height = height; } markSelectDom() } }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址