Decode Base64-encoded text in Reddit posts and convert URLs to clickable links.
目前為
// ==UserScript==
// @name Reddit B64 Decoder
// @namespace https://greasyfork.org/es/scripts/476028-reddit-b64-decoder
// @version 1.0
// @description Decode Base64-encoded text in Reddit posts and convert URLs to clickable links.
// @author Shu2Ouma
// @license MIT
// @match https://*.reddit.com/r/*
// @grant none
// ==/UserScript==
function decode(domElement) {
const words = domElement.innerText.split(' ');
const transformed = words.map(word => {
try {
const decoded = atob(word);
if (decoded.includes('https://') || decoded.includes('http://')) {
return (
decoded
.replace(/[\r\n]+/g, '<br /><br />')
.replace(/(https?:\/\/[^\s<]+)/g, `<a href="$1" target="_blank" style='text-decoration: underline #8989ff dotted; text-underline-offset: 2px;'>$1</a>`)
);
}
} catch (error) {
console.error(`Error decoding word: ${word}`, error);
}
return word;
});
domElement.innerHTML = transformed.join(' ');
}
function decodeOnPage() {
const postContents = document.querySelectorAll('p');
postContents.forEach(decode);
}
// Ejecutar el script al finalizar la carga de la página
window.addEventListener('load', () => {
decodeOnPage();
// Observar cambios en el DOM después de cargar la página
const observer = new MutationObserver(mutationsList => {
mutationsList.forEach(mutation => {
if (mutation.addedNodes.length > 0) {
mutation.addedNodes.forEach(node => {
if (node instanceof HTMLElement) {
const postContents = node.querySelectorAll('p');
postContents.forEach(decode);
}
});
}
});
});
// Iniciar la observación de cambios en el DOM
observer.observe(document.body, { childList: true, subtree: true });
});