Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

151
Vistas
userscript para deshacerse del molesto contador de notificaciones en el título de páginas como Facebook, Linkedin, etc.

Estoy tratando de hacer un script de usuario para deshacerme del molesto contador de notificaciones en el título de páginas como Facebook, Linkedin, etc.

Primero traté de usar la extensión "Cambiar nombre de título de pestaña" https://chrome.google.com/webstore/detail/rename-tab-title/kppndhfiaenbiioipolacicknfmdcdep con mi configuración descrita en la pestaña Soporte de esa página, en el comentario del usuario Sérgio Loureiro. Pero no tuvo éxito.

Lo que quiero decir es la cosa "(1)" antes del título de la página, que se representará en la pestaña respectiva. En este caso lo estaba haciendo para el navegador Vivaldi, que soporta script de usuario desde la base, sin ninguna extensión. Creo que esto también está disponible para otros navegadores a través de tampermonkey o greasemonkey.

Un ejemplo:

ingrese la descripción de la imagen aquí

Así que escribí un archivo *.user.js con el contenido:

 // ==UserScript== // @match http://*/* // @match https://*/* // ==/UserScript== (function () { document.title = document.title.replace(/^\(.*\) /, ''); // Select the node that will be observed for mutations const targetNode = document.getElementById('title'); // Options for the observer (which mutations to observe) const config = { characterData: true }; // Callback function to execute when mutations are observed const callback = function(mutationsList, observer) { // Use traditional 'for loops' for IE 11 for(const mutation of mutationsList) { document.title = document.title.replace(/^\(.*\) /, ''); } }; // Create an observer instance linked to the callback function const observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(targetNode, config); })();

y seguí el proceso en https://forum.vivaldi.net/topic/66719/userscript-installation para agregarlo al navegador como una extensión, pero sigo viendo este contador que distrae. ☹️

Entonces, mi pregunta, como una persona muy laica en javascript y scripts de usuario es: ¿Qué estoy haciendo mal?

He escrito el controlador del observador de mutaciones para detectar cuándo la página del servidor intenta cambiar el título de la página de una operación de solicitud de carga de página, pero me parece que no está funcionando.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Veo que tiene una posible solución de trabajo, pero hay algunas cosas que podrían mejorarse. Aquí está mi solución:

 // ==UserScript== // @name Remove Tab Title Notifciation Counters // @version 0.5 // @description Removes webpage notification counters that appear at the begining of the tab title. Ex.) "(1) Example Title" becomes "Example Title" // @author nomadic // @match http://*/* // @match https://*/* // ==/UserScript== (function () { function cleanTitleText() { let title = document.title; const regex = /^\(.*\) /; const hasNotificationCounter = regex.test(title); if (hasNotificationCounter) { document.title = title.replace(regex, ""); } } // observe changes in the webpage's title const targetElement = document.getElementsByTagName("title")[0]; const configurationOptions = { childList: true }; const observer = new MutationObserver(cleanTitleText); observer.observe(targetElement, configurationOptions); // perform an initial cleaning on load cleanTitleText(); })();

Notas sobre su solución:

Puede ser útil definir variables y crear funciones para ayudar a evitar confusiones y repeticiones. Si los nombra bien, también puede casi salirse con la suya sin escribir comentarios tal como se explican.

También tuve que hacer una comprobación de .match antes de la sustitución, porque algunos sitios dejaban de responder.

Hago una verificación similar con .test() . De lo contrario, puede terminar en un bucle infinito porque sigue cambiando el título y desencadenando otra mutación.

 const callback = function(mutationsList, observer) { // Use traditional 'for loops' for IE 11 for(const mutation of mutationsList) {

En este caso, realmente no le importa qué evento de mutación está activando la función de devolución de llamada. Realmente solo necesita recorrer las mutaciones si está observando múltiples aspectos diferentes de un elemento y realizando diferentes acciones según el tipo de mutación.

 const config = { subtree: true, characterData: true, childList: true};

Cuando se cambia el texto del título, en realidad es la mutación childList la que se detecta. Eso significa que el subtree y los datos de characterData no son necesarios.


¡Espero que las notas ayuden un poco! -nómada de los foros de Vivaldi

about 4 years ago · Juan Pablo Isaza Denunciar

0

Derivado de mis propias pruebas y experiencias de @cactus12, aquí hay un script de usuario que parece funcionar.

Uno debe seguir el proceso en https://forum.vivaldi.net/topic/66719/userscript-installation usando un script como el siguiente:

 // ==UserScript== // @match http://*/* // @match https://*/* // ==/UserScript== (function () { function cleanTitle() { const regex = /^\(.*\) /; if(document.title.match(regex) != null) document.title = document.title.replace(regex, ''); } // Select the node that will be observed for mutations const titleNode = document.querySelector('title'); // Options for the observer (which mutations to observe) const config = { childList: true }; // Create an observer instance linked to the callback function const observer = new MutationObserver(cleanTitle); // Start observing the target node for configured mutations observer.observe(titleNode, config); //----------------------------------------------------------------- cleanTitle(); //initial clean })();
about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que he tenido éxito, siguiendo el consejo de @ double-beep de observar no solo los datos de characterData .

Este es el script que tengo ahora. También tuve que hacer una comprobación de .match antes de la sustitución, porque algunos sitios dejaban de responder.

 // ==UserScript== // @match http://*/* // @match https://*/* // ==/UserScript== (function () { if(document.title.match(/^\(.*\) /) != null) { document.title = document.title.replace(/^\(.*\) /, ''); } // Select the node that will be observed for mutations const targetNode = document.querySelector('title'); // Options for the observer (which mutations to observe) const config = { subtree: true, characterData: true, childList: true }; // Callback function to execute when mutations are observed const callback = function(mutationsList, observer) { // Use traditional 'for loops' for IE 11 for(const mutation of mutationsList) { if(document.title.match(/^\(.*\) /) != null) { document.title = document.title.replace(/^\(.*\) /, ''); } } }; // Create an observer instance linked to the callback function const observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(targetNode, config); })();

Si alguien ve un problema en el código presentado, por favor dígame; No soy un tipo aleccionado en javascript y menos en scripts de usuario.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda