Estoy creando una extensión de Chrome que cambia el título de alguna página pdf, por ejemplo, https://arxiv.org/pdf/2005.01463v2.pdf .
El código funciona bien antes de que se cargue el pdf, pero cuando el pdf está completamente cargado, el título de la ventana se vuelve a cambiar al nombre del pdf (en lugar de mi título) y se usa document.title = "cool title" o los mensajes de Chrome a background.js No funciona.
Sin embargo, hacer un manual document.title = "cool title" desde la consola en una página pdf determinada funciona bien.
// content_script.js const makeTitle = (time) => { setTimeout(() => { title = "cool title" console.log("Updating pdf title"); chrome.runtime.sendMessage({ type: "update-title", options: { title } }) window.document.title = title; }, time) } makeTitle(0) makeTitle(1 * 1000); makeTitle(5 * 1000); makeTitle(10 * 1000); makeTitle(20 * 1000); makeTitle(60 * 1000); makeTitle(5 * 60 * 1000); // background.js chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { console.log("Executing background message") if (request.type == "update-title") { const { title } = request.options; chrome.tabs.executeScript(sender.tab.id, { code: `document.title = "${title}"` }); } }); Tengo que usar esos setTimeout porque no puedo detectar si un pdf ha terminado de cargarse. makeTitle funciona bien antes de que se cargue el pdf, pero no después y me gustaría resolver esto. ¡Gracias!
PD: Sé que hay un cambio de título duplicado, es solo que ninguna de esas 2 estrategias funciona
Es un error en Chrome. Establece el título internamente e ignora el elemento de title DOM.
La solución es usar chrome.tabs.onUpdated para establecer un título vacío y luego establecer el deseado.
fondo.js
const title = 'foo'; chrome.tabs.onUpdated.addListener((tabId, info, tab) => { if (info.title && info.title !== title && tab.url.endsWith('.pdf')) { chrome.tabs.executeScript(tabId, { code: `document.title=''; document.title="${title}"`, runAt: 'document_start', // runs immediately if this change occurs before DOMContentLoaded }); } }); Hay otro error en Chrome: muestra el título integrado de forma intermitente cuando cambias a otra pestaña y vuelves. Este error en particular parece estar solucionado en el próximo visor de PDF "sin sazonar", que se puede habilitar actualmente a través de chrome://flags/#pdf-unseasoned