149
background.js
Archivo normal
149
background.js
Archivo normal
@@ -0,0 +1,149 @@
|
||||
"use strict";
|
||||
|
||||
// Compatibilidad con Chrome y Firefox
|
||||
const browserAPI = typeof browser !== "undefined" ? browser : chrome;
|
||||
|
||||
// Configuración por defecto
|
||||
const DEFAULT_SETTINGS = {
|
||||
url: "about",
|
||||
firstRun: true
|
||||
};
|
||||
|
||||
// Inicializar storage con valores por defecto
|
||||
browserAPI.runtime.onInstalled.addListener(async (details) => {
|
||||
if (details.reason === "install") {
|
||||
await browserAPI.storage.local.set(DEFAULT_SETTINGS);
|
||||
// Abrir la página "about" en la primera instalación
|
||||
openArchivePage("about");
|
||||
} else if (details.reason === "update") {
|
||||
console.log("Classic Add-ons Archive updated to version", browserAPI.runtime.getManifest().version);
|
||||
}
|
||||
});
|
||||
|
||||
// Manejar clic en el botón de la barra de herramientas
|
||||
browserAPI.browserAction.onClicked.addListener(() => {
|
||||
openArchivePage();
|
||||
});
|
||||
|
||||
// Función para abrir la página del archivo
|
||||
async function openArchivePage(page) {
|
||||
try {
|
||||
// Obtener la URL guardada o usar la página especificada
|
||||
const settings = await browserAPI.storage.local.get("url");
|
||||
const targetPage = page || settings.url || "about";
|
||||
|
||||
// Construir la URL de la extensión
|
||||
const extensionUrl = browserAPI.runtime.getURL("content/ca-archive.html");
|
||||
const fullUrl = `${extensionUrl}#${targetPage}`;
|
||||
|
||||
// Verificar si ya hay una pestaña abierta con el archivo
|
||||
const tabs = await browserAPI.tabs.query({});
|
||||
let foundTab = null;
|
||||
|
||||
for (let tab of tabs) {
|
||||
if (tab.url && tab.url.startsWith(extensionUrl)) {
|
||||
foundTab = tab;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (foundTab) {
|
||||
// Si existe, activar la pestaña
|
||||
await browserAPI.tabs.update(foundTab.id, { active: true });
|
||||
await browserAPI.windows.update(foundTab.windowId, { focused: true });
|
||||
// Actualizar el hash si es necesario
|
||||
if (page) {
|
||||
await browserAPI.tabs.update(foundTab.id, { url: fullUrl });
|
||||
}
|
||||
} else {
|
||||
// Si no existe, crear nueva pestaña
|
||||
await browserAPI.tabs.create({ url: fullUrl });
|
||||
}
|
||||
|
||||
// Si abrimos "about" en primera ejecución, cambiar a página principal para siguientes veces
|
||||
if (targetPage === "about") {
|
||||
await browserAPI.storage.local.set({ url: "list", firstRun: false });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error opening archive page:", error);
|
||||
}
|
||||
}
|
||||
|
||||
// Interceptar peticiones para modificar headers cuando sea necesario
|
||||
browserAPI.webRequest.onHeadersReceived.addListener(
|
||||
(details) => {
|
||||
// Modificar headers para archivos de addons.mozilla.org archivados
|
||||
const headers = details.responseHeaders || [];
|
||||
|
||||
// Si es una descarga desde nuestro storage, manejar Content-Disposition
|
||||
if (details.url.includes("origin=caa")) {
|
||||
const newHeaders = headers.filter(h => h.name.toLowerCase() !== "content-disposition");
|
||||
|
||||
if (details.url.includes("action=install")) {
|
||||
// No forzar descarga para instalación
|
||||
return { responseHeaders: newHeaders };
|
||||
} else if (details.url.includes("action=download")) {
|
||||
// Forzar descarga
|
||||
newHeaders.push({
|
||||
name: "Content-Disposition",
|
||||
value: "attachment"
|
||||
});
|
||||
return { responseHeaders: newHeaders };
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
},
|
||||
{
|
||||
urls: ["<all_urls>"]
|
||||
},
|
||||
["blocking", "responseHeaders"]
|
||||
);
|
||||
|
||||
// Bloquear ciertas peticiones de web.archive.org
|
||||
browserAPI.webRequest.onBeforeRequest.addListener(
|
||||
(details) => {
|
||||
if (details.url.includes("web.archive.org")) {
|
||||
// Bloquear scripts y recursos específicos de AMO que no queremos cargar
|
||||
if (/\/web\/.+?\/(addons\.mozilla\.org\/.+?\/more|addons\.cdn\.mozilla\.net\/.+?\/loading-more\.gif|addons-amo\.cdn\.mozilla\.net\/amo-.+?\.js)/.test(details.url)) {
|
||||
return { cancel: true };
|
||||
}
|
||||
}
|
||||
return {};
|
||||
},
|
||||
{
|
||||
urls: ["*://web.archive.org/*"]
|
||||
},
|
||||
["blocking"]
|
||||
);
|
||||
|
||||
// Manejar comandos de teclado (si se configuran)
|
||||
if (browserAPI.commands && browserAPI.commands.onCommand) {
|
||||
browserAPI.commands.onCommand.addListener((command) => {
|
||||
if (command === "open-archive") {
|
||||
openArchivePage();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Escuchar mensajes desde content scripts
|
||||
browserAPI.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
||||
if (message.action === "openPage") {
|
||||
openArchivePage(message.page);
|
||||
sendResponse({ success: true });
|
||||
} else if (message.action === "getSettings") {
|
||||
browserAPI.storage.local.get(null).then(settings => {
|
||||
sendResponse({ settings });
|
||||
});
|
||||
return true; // Mantener el canal abierto para respuesta asíncrona
|
||||
} else if (message.action === "saveSettings") {
|
||||
browserAPI.storage.local.set(message.settings).then(() => {
|
||||
sendResponse({ success: true });
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
console.log("Classic Add-ons Archive background script loaded");
|
||||
Referencia en una nueva incidencia
Block a user