copy red dot
This commit is contained in:
125
script-copy-source-red-dot.js
Normal file
125
script-copy-source-red-dot.js
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
|
||||||
|
// ==UserScript==
|
||||||
|
// @name HTML Source Dot
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 1.0
|
||||||
|
// @description Minimal HTML source viewer with draggable red dot
|
||||||
|
// @author YourName
|
||||||
|
// @match *://*/*
|
||||||
|
// @grant GM_setClipboard
|
||||||
|
// @run-at document-start
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// 创建小红点元素
|
||||||
|
const dot = document.createElement('div');
|
||||||
|
dot.id = 'source-dot';
|
||||||
|
dot.style.cssText = `
|
||||||
|
position: fixed;
|
||||||
|
top: 20px;
|
||||||
|
left: 20px;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
background: #ff4444;
|
||||||
|
border-radius: 50%;
|
||||||
|
cursor: move;
|
||||||
|
z-index: 99999;
|
||||||
|
box-shadow: 0 0 4px rgba(0,0,0,0.3);
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
`;
|
||||||
|
|
||||||
|
// 创建隐藏的源码容器
|
||||||
|
const sourceContainer = document.createElement('div');
|
||||||
|
sourceContainer.id = 'source-container';
|
||||||
|
sourceContainer.style.cssText = `
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 99998;
|
||||||
|
background: white;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 8px;
|
||||||
|
max-width: 80vw;
|
||||||
|
max-height: 80vh;
|
||||||
|
overflow: auto;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
`;
|
||||||
|
|
||||||
|
// 添加到文档
|
||||||
|
document.documentElement.appendChild(dot);
|
||||||
|
document.documentElement.appendChild(sourceContainer);
|
||||||
|
|
||||||
|
// 拖拽功能
|
||||||
|
let isDragging = false;
|
||||||
|
let offsetX, offsetY;
|
||||||
|
|
||||||
|
dot.addEventListener('mousedown', function(e) {
|
||||||
|
if (e.button !== 0) return; // 只响应左键
|
||||||
|
isDragging = true;
|
||||||
|
offsetX = e.clientX - dot.getBoundingClientRect().left;
|
||||||
|
offsetY = e.clientY - dot.getBoundingClientRect().top;
|
||||||
|
dot.style.cursor = 'grabbing';
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('mousemove', function(e) {
|
||||||
|
if (!isDragging) return;
|
||||||
|
dot.style.left = (e.clientX - offsetX) + 'px';
|
||||||
|
dot.style.top = (e.clientY - offsetY) + 'px';
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('mouseup', function() {
|
||||||
|
isDragging = false;
|
||||||
|
dot.style.cursor = 'move';
|
||||||
|
});
|
||||||
|
|
||||||
|
// 悬停效果
|
||||||
|
dot.addEventListener('mouseenter', function() {
|
||||||
|
dot.style.transform = 'scale(1.5)';
|
||||||
|
dot.style.background = '#4CAF50';
|
||||||
|
dot.title = 'Click to copy HTML';
|
||||||
|
});
|
||||||
|
|
||||||
|
dot.addEventListener('mouseleave', function() {
|
||||||
|
dot.style.transform = '';
|
||||||
|
dot.style.background = '#ff4444';
|
||||||
|
dot.title = '';
|
||||||
|
});
|
||||||
|
|
||||||
|
// 点击复制功能
|
||||||
|
dot.addEventListener('click', function() {
|
||||||
|
const html = document.documentElement.outerHTML;
|
||||||
|
GM_setClipboard(html, 'text');
|
||||||
|
|
||||||
|
// 显示临时提示
|
||||||
|
sourceContainer.textContent = 'HTML copied to clipboard!';
|
||||||
|
sourceContainer.style.display = 'block';
|
||||||
|
sourceContainer.style.left = (parseInt(dot.style.left) + 20) + 'px';
|
||||||
|
sourceContainer.style.top = dot.style.top;
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
sourceContainer.style.display = 'none';
|
||||||
|
}, 1500);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 立即显示小红点
|
||||||
|
dot.style.display = 'block';
|
||||||
|
|
||||||
|
// 持续更新源码(即使在加载过程中)
|
||||||
|
const updateSource = () => {
|
||||||
|
sourceContainer.textContent = document.documentElement.outerHTML;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 初始获取
|
||||||
|
updateSource();
|
||||||
|
|
||||||
|
// 定时更新
|
||||||
|
const interval = setInterval(updateSource, 300);
|
||||||
|
window.addEventListener('DOMContentLoaded', () => {
|
||||||
|
clearInterval(interval);
|
||||||
|
updateSource();
|
||||||
|
});
|
||||||
|
window.addEventListener('load', updateSource);
|
||||||
|
})();
|
||||||
@@ -1179,6 +1179,8 @@ class TianYanChaParser {
|
|||||||
// 复制源码按钮
|
// 复制源码按钮
|
||||||
const copySourceButton = createButton("复制源码", () => {
|
const copySourceButton = createButton("复制源码", () => {
|
||||||
const html = document.documentElement.outerHTML;
|
const html = document.documentElement.outerHTML;
|
||||||
|
|
||||||
|
//ToolUtils.copyToClipboard(html, "源码已复制到剪贴板");
|
||||||
GM_setClipboard(html, 'text');
|
GM_setClipboard(html, 'text');
|
||||||
ToolUtils.showAutoCloseMessage("源码已复制到剪贴板", "success")
|
ToolUtils.showAutoCloseMessage("源码已复制到剪贴板", "success")
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user