您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Copy full context of Reddit comments to clipboard
// ==UserScript== // @name Reddit Comment Context Copier // @namespace http://greasyfork.org/ // @version 0.1 // @description Copy full context of Reddit comments to clipboard // @author Chicken & ChatGPT // @match https://www.reddit.com/* // @grant GM_setClipboard // @license MIT // ==/UserScript== function addButtonToComment(comment) { const listItem = document.createElement('li'); const anchor = document.createElement('a'); anchor.textContent = 'copy-context'; anchor.style.cursor = 'pointer'; anchor.addEventListener('click', function(event) { event.preventDefault(); copyCommentContext(comment); }); listItem.appendChild(anchor); comment.querySelector('.buttons').appendChild(listItem); } window.addEventListener('load', function() { // Function to handle added nodes function handleAddedNodes(nodes) { nodes.forEach(node => { if (node.classList && node.classList.contains('comment')) { addButtonToComment(node); } else if (node.querySelectorAll) { node.querySelectorAll('.comment').forEach(addButtonToComment); } }); } // Set up the observer const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { handleAddedNodes(Array.from(mutation.addedNodes)); }); }); // Start observing const config = { childList: true, subtree: true }; observer.observe(document.body, config); // Add buttons to existing comments document.querySelectorAll('.comment').forEach(addButtonToComment); }); function copyCommentContext(comment) { let context = ''; function processNode(node) { if (node.nodeType === Node.TEXT_NODE) { return node.nodeValue; } else if (node.nodeType === Node.ELEMENT_NODE) { if (node.tagName.toLowerCase() === 'p') { return node.textContent + '\n'; } else if (node.tagName.toLowerCase() === 'blockquote') { // Process each child node and prepend '>' to each line return Array.from(node.childNodes) .map(child => child.tagName && child.tagName.toLowerCase() === 'p' ? '> ' + child.textContent : processNode(child)) .join('\n') + '\n'; } return Array.from(node.childNodes).map(processNode).join(''); } return ''; } let currentElement = comment; while (currentElement && currentElement.classList.contains('comment')) { const author = "**"+currentElement.querySelector('.author').textContent+"**"; const commentBody = currentElement.querySelector('.usertext .md'); const commentText = Array.from(commentBody.childNodes).map(processNode).join(''); context = author + ': ' + commentText + '\n' + context; currentElement = currentElement.parentElement.closest('.comment'); } GM_setClipboard(context.trim()); }