lp177
Simple Url Switcher

Simple Url Switcher

Passer une page d’un appareil à l’autre en gardant la position de lecture

Extension navigateurmars 2021JavaScriptWebExtensions (Manifest V3)FirefoxChromePHP

Code source

Extension Firefox et Chrome qui envoie la page courante vers un petit serveur personnel, avec le minutage de lecture sur YouTube, Twitch, SoundCloud et Radio France. Un autre appareil, même sans extension, rouvre la page au même instant en deux clics.

But du projet

Reprendre une vidéo ou un morceau commencé sur l’ordinateur depuis un téléphone (ou l’inverse) sans chercher la page ni l’instant. L’extension dépose l’adresse sur un serveur que l’on héberge soi-même ; aucun compte ni service tiers n’est nécessaire.

Fonctionnalités

  • Un clic sur l’icône enregistre l’adresse de l’onglet courant sur le serveur configuré.
  • Position de lecture conservée sur YouTube, Twitch, SoundCloud et Radio France ; sur les autres sites, l’adresse seule est enregistrée.
  • Menu contextuel : Open here (ouvre la dernière adresse enregistrée), Save this url, Watch saved url (affiche l’adresse enregistrée).
  • Sur un appareil sans extension, ouvrir <serveur>/swap.html redirige vers la page enregistrée.
  • Page de réglages : jeton et adresse du serveur, synchronisés par le navigateur (storage.sync).

Fonctionnement

Le script d’arrière-plan (sw.js) injecte inject.js dans l’onglet. Celui-ci reconnaît le site et construit une adresse horodatée : lien de partage avec horodatage sur Twitch, ancre #t= sur SoundCloud, adresse du flux audio et position sur Radio France. Pour YouTube, integrations/youtube.js est injecté dans le contexte de la page afin d’appeler getVideoUrl() du lecteur, et le résultat repasse par un attribut du <body>.

L’adresse est ensuite envoyée en POST, avec le jeton, à <serveur>/swap.php. Le script PHP d’exemple fourni dans le README vérifie le jeton, écrit l’adresse dans swap.txt et génère swap.html, une page qui redirige vers elle.

Installation

  1. Serveur : déposer le swap.php du README sur un hébergement PHP, en remplaçant MY_TOKEN_KEY_HERE par un jeton aléatoire.
  2. Extension : sh zipMe.sh produit chrome.zip et firefox.zip. Pour un chargement direct, le manifest.json du dépôt est la version Firefox (about:debugging, « Charger un module complémentaire temporaire ») ; pour Chrome, copier chrome_manifest.json sur manifest.json puis charger l’extension non empaquetée en mode développeur.
  3. Réglages : saisir le jeton et l’adresse du serveur, sans barre oblique finale.

Limites connues

  • Une seule adresse est conservée : chaque envoi remplace le précédent.
  • swap.txt et swap.html sont lisibles par quiconque connaît l’adresse du serveur ; seul l’enregistrement est protégé par le jeton.
  • La récupération du minutage dépend de la structure HTML des sites pris en charge et peut cesser de fonctionner quand elle change.
  • Firefox 109 minimum.