238 líneas
6.4 KiB
Markdown
238 líneas
6.4 KiB
Markdown
# Migración a WebExtensions (Versión 3.0)
|
|
|
|
## Resumen de cambios
|
|
|
|
La extensión Classic Add-ons Archive ha sido modernizada desde el sistema legacy XUL/XPCOM a WebExtensions para ser compatible con navegadores modernos Firefox (57+) y Chrome.
|
|
|
|
## Cambios principales
|
|
|
|
### 1. Sistema de manifiesto
|
|
|
|
**ANTES (Legacy):**
|
|
- `install.rdf` - Manifiesto XML
|
|
- `chrome.manifest` - Registro de recursos chrome://
|
|
- `bootstrap.js` - Script de arranque con XPCOM
|
|
|
|
**AHORA (WebExtensions):**
|
|
- `manifest.json` - Manifiesto estándar WebExtensions (Manifest V2)
|
|
- `background.js` - Script de fondo con APIs modernas
|
|
|
|
### 2. Protocolo de navegación
|
|
|
|
**ANTES:**
|
|
```
|
|
caa:list
|
|
caa:addon/some-addon
|
|
caa:about
|
|
```
|
|
|
|
**AHORA:**
|
|
```
|
|
chrome-extension://.../content/ca-archive.html#list
|
|
chrome-extension://.../content/ca-archive.html#addon/some-addon
|
|
chrome-extension://.../content/ca-archive.html#about
|
|
```
|
|
|
|
La navegación ahora usa hash (#) en lugar de un protocolo personalizado.
|
|
|
|
### 3. Acceso a recursos
|
|
|
|
**ANTES:**
|
|
```html
|
|
<link href="chrome://ca-archive/skin/ca-archive.css">
|
|
<script src="chrome://ca-archive/content/ca-archive.js">
|
|
```
|
|
|
|
**AHORA:**
|
|
```html
|
|
<link href="../skin/ca-archive.css">
|
|
<script src="ca-archive.js">
|
|
```
|
|
|
|
Todos los recursos usan rutas relativas.
|
|
|
|
### 4. Base de datos SQLite
|
|
|
|
**ANTES:**
|
|
- Acceso directo a SQLite usando `mozIStorageService`
|
|
- Almacenamiento en perfil del usuario
|
|
|
|
**AHORA:**
|
|
- Usa `sql.js` (SQLite compilado a JavaScript/WebAssembly)
|
|
- Base de datos almacenada en `browser.storage.local`
|
|
- Primera carga descarga y cachea la DB
|
|
|
|
### 5. APIs reemplazadas
|
|
|
|
| Legacy API | WebExtensions API |
|
|
|------------|-------------------|
|
|
| `Components.utils` | Scripts estándar ES6 |
|
|
| `Services.prefs` | `browser.storage.local` |
|
|
| `Services.wm` | `browser.tabs` y `browser.windows` |
|
|
| `mozIStorageService` | `sql.js` |
|
|
| `XPCOMUtils` | APIs nativas del navegador |
|
|
| `Cu.import()` | `import` / carga dinámica de scripts |
|
|
|
|
### 6. Interfaz de usuario
|
|
|
|
**ANTES:**
|
|
- Botón insertado directamente en la barra de herramientas
|
|
- Menú en Tools
|
|
|
|
**AHORA:**
|
|
- `browser.browserAction` - Botón estándar en la barra
|
|
- Sin menú en Tools (no disponible en WebExtensions)
|
|
|
|
## Estructura de archivos
|
|
|
|
### Archivos nuevos
|
|
- `manifest.json` - Manifiesto WebExtensions
|
|
- `background.js` - Script de fondo
|
|
- `content/db-webext.js` - Wrapper de base de datos moderno
|
|
|
|
### Archivos modificados
|
|
- `content/ca-archive.html` - Rutas relativas, navegación por hash
|
|
- `content/ca-archive.js` - Sin Components, carga dinámica de módulos
|
|
|
|
### Archivos obsoletos (ya no se usan)
|
|
- `install.rdf` - Reemplazado por manifest.json
|
|
- `chrome.manifest` - Ya no necesario
|
|
- `bootstrap.js` - Reemplazado por background.js
|
|
- `update.xml` - Actualizaciones ahora vía Firefox/Chrome stores
|
|
|
|
## Compatibilidad
|
|
|
|
### Navegadores soportados
|
|
|
|
| Navegador | Versión mínima | Notas |
|
|
|-----------|----------------|-------|
|
|
| Firefox | 57+ (Quantum) | Soporte completo |
|
|
| Chrome | 80+ | Requiere manifest V2 |
|
|
| Edge (Chromium) | 80+ | Compatible con Chrome |
|
|
| Brave | 1.20+ | Compatible con Chrome |
|
|
| Vivaldi | 3.0+ | Compatible con Chrome |
|
|
|
|
### Navegadores NO soportados
|
|
|
|
Los siguientes navegadores que usaban la versión legacy ya no son compatibles con la versión WebExtensions:
|
|
|
|
- Firefox ESR 45-52
|
|
- Firefox 45-56
|
|
- Pale Moon
|
|
- Basilisk
|
|
- Waterfox Classic (pre-Current)
|
|
- SeaMonkey
|
|
|
|
**Nota:** Para estos navegadores, seguir usando la versión 2.x legacy.
|
|
|
|
## Instalación
|
|
|
|
### Firefox
|
|
|
|
1. **Desde archivo local:**
|
|
```bash
|
|
# Empaquetar la extensión
|
|
cd /home/ale/projects/firefox/ca-archive
|
|
zip -r ca-archive-3.0.zip * -x ".*" -x "*.md" -x "update.xml" -x "install.rdf" -x "chrome.manifest" -x "bootstrap.js"
|
|
```
|
|
|
|
2. En Firefox, ir a `about:debugging` > Este Firefox > Cargar extensión temporal
|
|
3. Seleccionar el archivo `manifest.json` o el archivo `.zip`
|
|
|
|
### Chrome/Edge/Brave
|
|
|
|
1. Ir a `chrome://extensions/`
|
|
2. Activar "Modo de desarrollador"
|
|
3. Click en "Cargar extensión sin empaquetar"
|
|
4. Seleccionar la carpeta del proyecto
|
|
|
|
## Desarrollo
|
|
|
|
### Dependencias
|
|
|
|
La extensión requiere `sql.js` para el acceso a la base de datos SQLite:
|
|
|
|
```html
|
|
<!-- Cargado automáticamente desde CDN en db-webext.js -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.js"></script>
|
|
```
|
|
|
|
**Para producción:** Descargar sql.js localmente y actualizar las rutas en `db-webext.js`.
|
|
|
|
### Debugging
|
|
|
|
**Firefox:**
|
|
- `about:debugging` > Inspeccionar
|
|
- Console del navegador: `Ctrl+Shift+J`
|
|
|
|
**Chrome:**
|
|
- `chrome://extensions/` > Detalles > Inspeccionar vistas: background page
|
|
- DevTools: `F12`
|
|
|
|
### Testing
|
|
|
|
1. Abrir la extensión
|
|
2. Verificar que la base de datos se carga correctamente
|
|
3. Probar navegación: listados, búsquedas, detalles de addons
|
|
4. Verificar que las descargas funcionan
|
|
|
|
## Limitaciones conocidas
|
|
|
|
### WebExtensions vs Legacy
|
|
|
|
1. **Multi-proceso (e10s):** Ahora sólo funciona con e10s activado
|
|
2. **Protocolo personalizado:** Ya no disponible, usa rutas de extensión
|
|
3. **Modificación de AMO pages:** No puede inyectar hints en addons.mozilla.org
|
|
4. **Barra de herramientas:** Botón en ubicación fija, no personalizable
|
|
5. **Storage:** Base de datos limitada por cuota de storage del navegador
|
|
|
|
### Tamaño de base de datos
|
|
|
|
Chrome/Firefox tienen límites de storage:
|
|
- Chrome: ~10MB en `storage.local` (puede ampliarse con `unlimitedStorage`)
|
|
- Firefox: Sin límite práctico en `storage.local`
|
|
|
|
Si la base de datos es muy grande (>10MB), considerar:
|
|
1. Agregar permiso `unlimitedStorage` en manifest.json
|
|
2. Usar chunks/compresión
|
|
3. Almacenar en IndexedDB
|
|
|
|
## Migración de datos de usuario
|
|
|
|
La nueva versión NO migra automáticamente datos de la versión legacy porque:
|
|
|
|
1. Las APIs de storage son completamente diferentes
|
|
2. La base de datos se descarga nueva en cada instalación
|
|
3. No hay configuraciones de usuario persistentes
|
|
|
|
## Próximos pasos
|
|
|
|
### Para publicar en stores
|
|
|
|
1. **Firefox Add-ons (AMO):**
|
|
- Crear cuenta en addons.mozilla.org
|
|
- Subir archivo .zip
|
|
- Esperar revisión
|
|
|
|
2. **Chrome Web Store:**
|
|
- Crear cuenta de desarrollador ($5 USD único)
|
|
- Subir archivo .zip
|
|
- Completar listing
|
|
|
|
### Mejoras futuras
|
|
|
|
- [ ] Migrar a Manifest V3 (cuando Firefox tenga mejor soporte)
|
|
- [ ] Offline-first: cachear más contenido
|
|
- [ ] Sincronización de favoritos/bookmarks
|
|
- [ ] Dark mode
|
|
- [ ] Búsqueda mejorada con índices
|
|
|
|
## Soporte
|
|
|
|
- GitHub: https://github.com/JustOff/ca-archive/
|
|
- Issues: https://github.com/JustOff/ca-archive/issues
|
|
|
|
## Licencia
|
|
|
|
La extensión continúa bajo Mozilla Public License 2.0 (MPL-2.0).
|