← Tous les articles

API et helpers

Les règles JavaScript JustZix fonctionnent désormais même sur Facebook, X et GitHub

Les pages où le JS des userscripts s'effondrait — Facebook, X, GitHub et bien d'autres sites dotés d'une Content-Security-Policy stricte — constituaient un goulot d'étranglement pour JustZix aussi. Dans la version 3.2.0, nous avons changé le moteur d'exécution du code afin qu'il franchisse cette barrière sans astuces et sans compromis sur le reste du web. Voici ce qu'il fait et pourquoi.

Ce que la CSP bloquait réellement

Une Content-Security-Policy assortie d'une directive script-src qui omet 'unsafe-eval' et 'unsafe-inline' indique au navigateur : « ne pas exécuter de code construit à partir d'une chaîne ». C'est précisément la politique qui bloque le classique new Function('...code...')() par lequel JustZix exécutait le JS des règles et des actions dans le monde MAIN jusqu'à la v3.1.x. La page la plus douloureusement affectée par cette restriction était facebook.com — qui dormait dans notre backlog depuis des mois avec l'étiquette « infaisable ».

Trois voies, une décision

Dans la v3.2.0, nous avons introduit une stratégie en couches — l'extension essaie chaque voie jusqu'à ce que l'une fonctionne :

  1. chrome.userScripts.execute — l'API native des user-scripts de Manifest V3. Elle exécute le code sous forme de chaîne en dehors du monde CSP de la page, elle fonctionne donc partout, y compris avec les politiques les plus strictes. Elle requiert la permission userScripts dans le manifeste (nous l'avons) et un activation unique de « Autoriser les scripts utilisateur » dans les paramètres d'extensions du navigateur (vous cliquez, vous gardez le contrôle).
  2. new Function — la voie classique et rapide quand la CSP de la page autorise 'unsafe-eval'. La plupart des sites ordinaires l'autorisent (Google, YouTube, Reddit, Wikipédia, boutiques en ligne), donc 99 % de vos règles continuent de passer par cette voie sans aucune configuration.
  3. <script src="blob:…"> — un repli qui crée une URL Blob locale et l'injecte sous forme de balise script classique. Il fonctionne quand la CSP de la page autorise blob: dans script-src — ce que fait facebook.com. Il permet l'exécution même lorsque l'utilisateur n'a pas encore activé les « scripts utilisateur ».

Ce que cela change en pratique

Les règles JS de JustZix, les actions et les fenêtres TEMP JS / Console JS s'exécutent désormais sur des pages qui déclenchaient auparavant une EvalError :

Si aucune voie ne fonctionne (rare, il faut que la page interdise à la fois 'unsafe-eval' et blob:), les fenêtres du panneau JS et de la Console JS affichent un message clair « activez les scripts utilisateur » en 8 langues. Un clic dans les paramètres du navigateur et le reste est automatique.

Comment activer les « scripts utilisateur »

La permission est mémorisée une fois pour toutes. Nous n'avons pas ajouté notre propre écran de consentement — c'est un choix délibéré dans les paramètres du navigateur, pas une demande surprise de notre part.

Pourquoi cela compte face aux alternatives

Les extensions de userscripts comme Tampermonkey ou Violentmonkey ont besoin que la page autorise 'unsafe-eval', ou elles s'appuient sur leur propre bac à sable utilisant eval. JustZix dispose de trois voies, donc là où ces extensions déclenchent une « erreur CSP » et attendent la clémence de l'auteur de la page, nous choisissons discrètement une alternative. C'est le plus important changement d'architecture depuis le début du projet — et celui qui rend enfin les paquets d'exemples Facebook, X et GitHub du catalogue véritablement utiles.

Voir aussi

Installez JustZix — et écrivez des règles sur facebook.com sans excuses.

Notez cet article

Aucune note — soyez le premier.

Essayez vous-même

Installez JustZix et collez n'importe quel snippet de cet article. Deux minutes de zéro à une règle fonctionnelle sur tous vos appareils.

Obtenir JustZix

Fonctionnalités · Comment ça marche · Exemples · Cas d'usage