← Tutti gli articoli

API e helper

Le regole JavaScript di JustZix ora funzionano anche su Facebook, X e GitHub

Le pagine in cui il JS degli userscript andava in pezzi — Facebook, X, GitHub e tante altre con una Content-Security-Policy rigida — sono state a lungo un collo di bottiglia anche per JustZix. Nella versione 3.2.0 abbiamo cambiato il motore di esecuzione del codice in modo che superi quella barriera senza trucchi e senza compromessi sul resto del web. Ecco cosa fa e perché.

Cosa bloccava davvero la CSP

Una Content-Security-Policy con una direttiva script-src che omette 'unsafe-eval' e 'unsafe-inline' dice al browser: "non eseguire codice costruito a partire da una stringa". È la policy che blocca il classico new Function('...codice...')() con cui JustZix eseguiva il JS delle regole e delle azioni nel mondo MAIN fino alla v3.1.x. La pagina più dolorosamente colpita da questa restrizione era facebook.com — ferma nel nostro backlog da mesi con l'etichetta "non si può fare".

Tre strade, una decisione

Nella v3.2.0 abbiamo introdotto una strategia a livelli — l'estensione prova ogni strada finché una funziona:

  1. chrome.userScripts.execute — l'API nativa per gli user-script di Manifest V3. Esegue il codice come stringa fuori dal mondo CSP della pagina, quindi funziona ovunque, anche con le policy più rigide. Richiede il permesso userScripts nel manifest (lo abbiamo) e un'attivazione una tantum dell'interruttore "Allow user scripts" (Consenti gli user-script) nelle impostazioni dell'estensione nel browser (lo attivi tu, il controllo resta nelle tue mani).
  2. new Function — la strada veloce e classica quando la CSP della pagina consente 'unsafe-eval'. La maggior parte dei siti comuni lo fa (Google, YouTube, Reddit, Wikipedia, negozi online), perciò il 99% delle tue regole continua a passare per questa strada senza alcuna configurazione.
  3. <script src="blob:…"> — un fallback che crea un Blob URL locale e lo inietta come tag script classico. Funziona quando la CSP della pagina consente blob: in script-src — e facebook.com lo consente. Permette di eseguire codice anche se non hai ancora abilitato gli "user scripts".

Cosa significa in pratica

Le regole JS di JustZix, le azioni e le finestre TEMP JS / JS Console ora girano su pagine che prima lanciavano EvalError:

Se nessuna strada funziona (raro, richiede che la pagina vieti sia 'unsafe-eval' sia blob:), i pannelli JS e le finestre JS Console mostrano un messaggio chiaro "abilita gli user scripts" in 8 lingue. Un clic nelle impostazioni del browser e il resto è automatico.

Come abilitare gli "user scripts"

Il permesso resta memorizzato una volta per tutte. Non abbiamo aggiunto una nostra schermata di consenso — è una scelta deliberata, fatta nelle impostazioni del browser, non un prompt a sorpresa da parte nostra.

Perché è importante rispetto alle alternative

Estensioni per userscript come Tampermonkey o Violentmonkey hanno bisogno che la pagina consenta 'unsafe-eval', oppure si affidano a una propria sandbox con eval. JustZix ha tre strade, quindi dove quelle estensioni lanciano un "errore CSP" e aspettano la clemenza dell'autore della pagina, noi scegliamo in silenzio un'alternativa. È il più grande cambiamento architetturale dall'inizio del progetto — e quello che finalmente rende sensati i pacchetti di esempio per Facebook, X e GitHub nel catalogo.

Vedi anche

Installa JustZix — e scrivi le tue regole su facebook.com senza più scuse.

Valuta questo articolo

Nessuna valutazione — sii il primo.

Provalo tu stesso

Installa JustZix e incolla qualsiasi snippet di questo articolo. Due minuti da zero a una regola funzionante su tutti i tuoi dispositivi.

Ottieni JustZix

Funzionalità · Come funziona · Esempi · Casi d'uso