Bug réel : la bannière 'Surlignez le texte à clipper' n'apparaissait jamais en pratique parce que le side panel envoyait SET_PICK_MODE avant que le content script ne soit prêt (race condition MV3 entre chrome.scripting.executeScript et la mise en place du listener chrome.runtime.onMessage). Le retry PING dans ensureContentScript ne suffisait pas : le listener sidepanel peut aussi être en retard. Fix radical : content.js affiche la bannière IMMÉDIATEMENT à l'initialisation, sans attendre SET_PICK_MODE. L'utilisateur voit immédiatement que l'extension est active. Un bouton ✕ permet de la fermer (state local au tab). Pas de dépendance sur le side panel pour le feedback visuel. + manifest : retrait de optional_host_permissions (redondant avec host_permissions http://*/* et https://*/*, peut perturber Chrome en dev). + bannière rediseignée : max-width 640px responsive, animation slideIn, bouton ✕ accessible. + nouvelles clés i18n bannerDismiss dans les 15 locales. + build : exclusion de store-assets/ du zip et du xpi (sinon le package Store faisait 327 Ko au lieu de 47 Ko).
Memento Web Clipper — extension Chrome
Clipper web avec panneau latéral : le panneau reste ouvert pendant que vous surlignez du texte sur la page.
Langues
L’extension suit la langue de l’interface Chrome (chrome.i18n.getUILanguage) — 15 locales comme l’app Memento : de, en, es, fr, it, pt, nl, pl, ru, zh, ja, ko, ar, fa, hi.
Fichiers : extension/_locales/<lang>/messages.json. Régénération : node extension/i18n/generate-translations.cjs puis node extension/scripts/build-extension-locales.mjs.
Installation (dev)
Chrome
chrome://extensions- Mode développeur → Charger l’extension non empaquetée → dossier
memento-note/extension - Épingle l’icône Memento
Chrome 114+ requis (Side Panel API).
Firefox
# Avec web-ext (https://extensionworkshop.com/)
npx web-ext run --source-dir memento-note/extension
Ou via about:debugging → Ce Firefox → Charger un module temporaire → sélectionner manifest.json.
Firefox 115+ requis (MV3 + sidebarAction).
Instance Memento
- Dev : icône ⚙ → URL (
http://localhost:3000ou IP LAN) → Appliquer & reconnecter - Connectez-vous sur la même URL dans Chrome (Google OAuth)
- Production (build Store) : mettre
ALLOW_INSTANCE_CONFIG = falsedanssidepanel.js→ URLhttps://memento-note.comen dur, réglages masqués
Utilisation
- Ouvrez une page web normale (pas
chrome://) - Cliquez l’icône Memento → panneau latéral
- Choisissez le carnet (liste hiérarchique)
- Optionnel : surlignez du texte → Clipper la sélection (bouton sky)
- Ou Clipper cette page (article complet + IA)
- Ou Enregistrer le lien seul
- Aperçu : titre éditable, résumé, extrait, temps de lecture → Enregistrer dans Memento
Dépannage
| Problème | Solution |
|---|---|
| Carnets vides / 401 | Ouvrir Memento ↗ sur la même URL, connectez-vous |
localhost vs 127.0.0.1 |
Utilisez toujours la même URL partout (cookies session) |
| Pas de sélection | Rechargez la page après install extension ; surlignez sur la page, pas dans le panneau |
| Page Chrome système | Impossible — ouvrez un site http(s) normal |
Persan / RTL
Détection automatique dir / lang (ex. BBC Persian), aperçu RTL avec Vazirmatn.
Builds production
Deux scripts produisent des paquets prêts à publier :
# Chrome Web Store (zip)
node extension/scripts/build-chrome-store.mjs
# → memento-note/extension/memento-web-clipper-chrome-store.zip (~44 Ko, 27 fichiers)
# Firefox Add-ons (xpi)
node extension/scripts/build-firefox.mjs
# → memento-note/extension/memento-web-clipper-firefox.xpi (~44 Ko, 27 fichiers)
Chaque build :
- Verrouille
ALLOW_INSTANCE_CONFIG = false(URL prod en dur) - Restreint les
host_permissionsàhttps://memento-note.com/* - Génère les PNG d'icônes depuis
public/icons/icon-{192,512}.svg - Exclut les fichiers internes (
i18n/,diagnose.js,test-sidepanel.html, etc.)
Différences manifest :
- Chrome :
side_panel(Side Panel API Chrome 114+) - Firefox :
sidebar_action+browser_specific_settings.gecko(Firefox 115+)
APIs
GET /api/clip/notebooksPOST /api/clip/analyzePOST /api/clip/save