您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Evita redirecciones publicitarias cuando lees capítulos en TMO
// ==UserScript== // @name Clean TMO // @description Evita redirecciones publicitarias cuando lees capítulos en TMO // @version 1.2 // @author Cflarios // @license MIT // @namespace https://github.com/cflarios/Clean_TMO // @homepage https://github.com/cflarios/Clean_TMO // @supportURL https://github.com/cflarios/Clean_TMO // @match https://zonatmo.com/library/* // @match https://zonatmo.com/viewer/* // @icon https://www.google.com/s2/favicons?domain=zonatmo.com // @grant GM_info // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM_openInTab // @grant GM_notification // @grant GM_addStyle // @grant GM_log // @grant GM_getResourceText // @grant GM_getResourceURL // @grant GM_listValues // @grant GM_addValueChangeListener // @grant GM_removeValueChangeListener // @grant GM_setClipboard // @grant GM_getTab // @grant GM_saveTab // @grant GM_getTabs // @grant GM_download // @grant GM_getResourceURL // @grant GM_getResourceText // ==/UserScript== (function () { 'use strict'; /** * Procesa y redirige al capítulo usando el UniqueId. * @param {string} chapterUrl URL original del capítulo. */ function redirectToChapter(chapterUrl) { fetch(chapterUrl, { method: 'GET', credentials: 'include', // Para enviar cookies asociadas }) .then((response) => response.text()) .then((html) => { // Buscar el uniqid en la respuesta HTML const uniqidMatch = html.match(/uniqid:\s*['"]([^'"]+)['"]/); if (uniqidMatch) { const uniqid = uniqidMatch[1]; // Captura el valor del uniqid console.log('UniqueId encontrado:', uniqid); // Crear la nueva URL con el uniqid const newChapterUrl = `https://zonatmo.com/viewer/${uniqid}/cascade`; console.log('Cargando capítulo desde:', newChapterUrl); // Actualizar la URL del navegador sin recargar la página history.pushState({}, '', newChapterUrl); // Cargar el contenido del capítulo dinámicamente fetch(newChapterUrl, { method: 'GET', credentials: 'include', }) .then((response) => response.text()) .then((chapterHtml) => { // Reemplazar el contenido de la página actual con el capítulo document.open(); document.write(chapterHtml); document.close(); // Recargar la página después de cargar el capítulo window.location.reload(); }) .catch((err) => console.error('Error cargando el capítulo:', err)); } else { console.error('UniqueId no encontrado en la respuesta. Por favor, vuelve a intentarlo.'); } }) .catch((err) => console.error('Error al obtener el capítulo:', err)); } /** * Observa cambios en el DOM para manejar navegaciones dinámicas. */ function observeDynamicChanges() { const observer = new MutationObserver((mutations) => { for (const mutation of mutations) { if (mutation.type === 'childList' || mutation.type === 'attributes') { const currentChapterLink = document.querySelector('a.next-chapter'); // Cambia esto según el selector real del botón "siguiente capítulo" if (currentChapterLink) { console.log('Navegación dinámica detectada. Procesando nuevo capítulo.'); redirectToChapter(currentChapterLink.href); } } } }); // Observa todo el cuerpo del documento observer.observe(document.body, { childList: true, subtree: true, attributes: true, }); console.log('Observador de cambios en la página inicializado.'); } /** * Inicializa el script interceptando enlaces y observando cambios dinámicos. */ function initialize() { console.log('Script Tampermonkey inicializado.'); // Interceptar clics en los enlaces de capítulos desde la lista document.addEventListener('click', function (e) { const target = e.target.closest('a'); if (target && target.href.includes('/view_uploads/')) { e.preventDefault(); // Evitar redirección predeterminada redirectToChapter(target.href); } }); // Activar el observador para navegaciones dinámicas observeDynamicChanges(); } initialize(); })();