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
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.htmlredirige 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
- Serveur : déposer le
swap.phpdu README sur un hébergement PHP, en remplaçantMY_TOKEN_KEY_HEREpar un jeton aléatoire. - Extension :
sh zipMe.shproduitchrome.zipetfirefox.zip. Pour un chargement direct, lemanifest.jsondu dépôt est la version Firefox (about:debugging, « Charger un module complémentaire temporaire ») ; pour Chrome, copierchrome_manifest.jsonsurmanifest.jsonpuis charger l’extension non empaquetée en mode développeur. - 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.txtetswap.htmlsont 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.