// ==UserScript== // @name 高效文本文件查看器 // @namespace http://tampermonkey.net/ // @version 1.5 // @description 优化文本文件查看体验,支持快速复制、下载及长文本处理 // @author niweizhuan // @match *://*/* // @grant GM_addElement // @grant GM_setClipboard // @grant GM_download // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 检测是否为纯文本文件 const isTextFile = window.location.pathname.toLowerCase().endsWith('.txt'); if (!isTextFile) { return; } // 创建一个新的HTML页面 const newPage = ` 文本文件查看器
加载失败,请检查链接是否正确。
`; // 替换当前文档内容 document.documentElement.innerHTML = newPage; // 创建 Web Worker 来处理文本加载 const worker = new Worker(URL.createObjectURL(new Blob([` self.onmessage = function(event) { const { url } = event.data; fetch(url) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.text(); }) .then(textContent => { self.postMessage({ success: true, textContent }); }) .catch(error => { self.postMessage({ success: false, error: error.message }); }); }; `], { type: 'text/javascript' }))); // 监听 Web Worker 的消息 worker.onmessage = function(event) { const { success, textContent, error } = event.data; const contentDiv = document.getElementById('content'); const copyButton = document.getElementById('copyAll'); const downloadButton = document.getElementById('downloadText'); const errorDiv = document.getElementById('error'); if (success) { contentDiv.textContent = textContent; // 如果文本过长,禁用复制按钮并提示用户下载 if (textContent.length > 1000000) { // 假设超过1MB时提示下载 copyButton.disabled = true; copyButton.textContent = '文本过长,无法复制'; downloadButton.textContent = '下载文件'; } // 添加按钮功能 copyButton.addEventListener('click', () => { GM_setClipboard(textContent, { "type": "text" }); alert('内容已复制到剪贴板!'); }); downloadButton.addEventListener('click', () => { GM_download({ url: window.location.href, name: window.location.pathname.split('/').pop(), confirm: false }); }); } else { alert('Failed to load text file:', error); errorDiv.style.display = 'block'; } }; // 向 Web Worker 发送消息,开始加载文本 worker.postMessage({ url: window.location.href }); })();