JustZix — manuale d'uso

Iniezione di stili CSS personalizzati, codice JavaScript e pulsanti azione su qualsiasi pagina

Indice

Concetto e termini principali

JustZix consente di iniettare automaticamente CSS e JavaScript personalizzati su pagine selezionate, oltre a definire pulsanti azione (scorciatoie che eseguono frammenti di codice su richiesta).

Gerarchia dei dati

Cartella
Il livello più alto — un gruppo di set per un singolo pattern URL. Ad es. la cartella "justzix.com" con il pattern https://justzix.com/*. È possibile abilitare/disabilitare l'intera cartella con un clic.
Gruppo
Livello intermedio tra cartella e set — aiuta a organizzare progetti più grandi (es. "Admin", "Frontend", "QA"). Ogni cartella ha almeno un gruppo. Il gruppo ha un proprio interruttore con cascata verso i set attivi.
Set
Una singola modifica: un frammento di CSS, un frammento di JS, più un elenco di pulsanti azione e, opzionalmente, pattern URL propri che lo limitano a sottopagine specifiche. Ogni set appartiene a un gruppo.
CSS
Stili applicati immediatamente — le modifiche sono visibili subito dopo il salvataggio, senza ricaricare la pagina.
JavaScript
Codice eseguito una volta a ogni caricamento di una pagina che corrisponde al pattern. Richiede il ricaricamento della pagina per essere eseguito di nuovo.
Pulsanti azione
Eseguono JavaScript solo dopo un clic, in una barra flottante. Ottimi per strumenti diagnostici e operazioni frequenti.

Pattern URL a livello di set e gruppo

Ogni set e ogni gruppo può ricevere un proprio elenco di pattern URL aggiuntivi (chip-input). Quando l'elenco è vuoto — l'elemento funziona ovunque corrisponda il pattern della cartella. Se imposti ad es. https://justzix.com/admin/* — l'elemento funzionerà solo sulle sottopagine dell'admin.

Pattern della cartellaPattern del setFunziona su
https://justzix.com/*(vuoto)tutto il dominio justzix.com
https://justzix.com/*https://justzix.com/admin/*solo la sezione /admin/
https://justzix.com/*https://justzix.com/produkty/*
https://justzix.com/koszyk
solo le sottopagine dei prodotti + carrello
*://localhost:*/**://localhost:3000/*solo la porta 3000 (dev)
I pattern URL per-set sono un filtro aggiuntivo — non sostituiscono il pattern della cartella. La regola si attiva solo quando l'URL corrisponde a entrambi: il pattern della cartella e almeno uno dei pattern del set (se presenti).

Tutorial — introduzione interattiva

Per i nuovi utenti JustZix include un tutorial interattivo che ti guida passo dopo passo nella creazione di una soluzione completa — da una cartella, passando per un gruppo e un set di regole, fino al codice CSS/JS e un pulsante azione. I suggerimenti appaiono come fumetti accanto agli elementi successivi del pannello.

Come avviarlo:

Nella finestra «Centro tutorial» scegli un tutorial e clicchi Inizia. Durante il tutorial:

Interfaccia e navigazione

Modalità di modifica

Accesso tramite clic destro sull'icona dell'estensione → "Opzioni", oppure clic sull'icona → pulsante "Pannello di modifica".

Pulsante flottante (sulle pagine corrispondenti)

Un piccolo pulsante rotondo appare automaticamente sulle pagine che corrispondono a una qualsiasi cartella. Per impostazione predefinita mostra la scritta ZIX, ma ogni cartella può avere la propria etichetta.

Etichetta della cartella: nella barra della cartella, all'estrema sinistra (accanto al color picker) c'è un campo di testo per l'etichetta del pulsante. Limiti imposti: max 3 caratteri, sempre MAIUSCOLO (la conversione in maiuscolo avviene immediatamente durante la digitazione). Il campo accetta lettere e cifre — esempi: ZIX, QA, DEV, ADM, X. Con più cartelle corrispondenti viene presa l'etichetta della prima che ne ha una impostata; le altre vengono ignorate (campo vuoto = fallback a ZIX).

Stato indicato dal colore (palette del brand):

Colore della cartella: se imposti il color picker accanto a una cartella, il pulsante flottante sulle pagine corrispondenti assumerà quel colore. Gli stati "mixed" e "off" modulano automaticamente la saturazione. Con più cartelle corrispondenti viene preso il colore della prima con un colore impostato.

Pannello

All'accesso al pannello di modifica l'estensione apre il Pannello — la pagina iniziale con un riepilogo della libreria e scorciatoie rapide. In precedenza il pannello selezionava automaticamente la prima cartella dell'elenco; ora vedi invece una panoramica.

Il Pannello è raggiungibile con il clic sul logo nella sidebar e con l'icona "casa" sulla barra breadcrumb di ogni editor (cartella, gruppo, set). Anche l'intestazione del Pannello stesso ha un'icona "casa" — il suo clic aggiorna i dati (ricarica la libreria dallo storage e ricostruisce il Pannello).

Il Pannello ha un layout con righe fisse di schede:

Le schede „Ultimi esempi" e „Dal blog" recuperano il contenuto dal sito del progetto; quando l'endpoint non è disponibile (es. offline), entrambe le schede vengono nascoste. La versione dell'estensione viene verificata di nuovo a ogni accesso al pannello.

Il pannello sinistro in modalità di modifica mostra le cartelle in una gerarchia — è possibile espandere ogni cartella per vederne i set e passare alla modifica di uno specifico set.

Navigazione

ElementoAzione
Freccia di espansioneEspande/comprime l'elenco dei set o dei gruppi (memorizzato tra le sessioni)
Clic sul nome della cartella (compressa)Seleziona la cartella, apre il Folder editor ed espande i suoi gruppi/set
Clic su una cartella già selezionataToggle: comprime (un clic successivo riespande) — analogamente per il gruppo
Clic sul nome del gruppo (compresso)Seleziona il gruppo, apre il Group editor ed espande i suoi set
Clic sul nome del setApre la vista del singolo set (Rule editor)
Checkbox accanto alla cartellaAbilita/disabilita l'intera cartella (cascata verso i gruppi e i loro set attivi)
Checkbox accanto al gruppoAbilita/disabilita il gruppo (cascata verso i suoi set attivi)
Checkbox accanto al setControlla in modo indipendente il singolo set
Stato ●/○ accanto a cartella/gruppo/setAttivo: ● attivo, ○ inattivo (forzatamente disabilitato)
C J A U accanto al setEtichette del contenuto: C = ha CSS, J = ha JavaScript, A = ha azioni, U = ha pattern URL propri. Appaiono solo quando il campo corrispondente non è vuoto.
Barra del colore a sinistraIl colore della cartella è disegnato con box-shadow inset — non sposta la posizione del nome della cartella (le cartelle con e senza colore sono allineate)
Maniglia drag&dropAfferra con il mouse e trascina per cambiare l'ordine
Stato predefinito dopo un'installazione pulita: tutte le cartelle e i gruppi sono compressi. Il primo clic espande, un clic successivo sullo stesso elemento comprime. Lo stato di espansione viene memorizzato tra le sessioni (storage expandedFolders, expandedGroups).

Riordino (drag & drop)

Passa il mouse su una cartella, un gruppo o un set — sul lato sinistro apparirà una maniglia drag&drop. Afferra con il mouse e trascina:

Cartelle

Gruppi

Set

Il drag & drop rispetta la selezione — se trascini il set attualmente selezionato tra cartelle, la selezione lo segue e la cartella di destinazione si espande automaticamente.
Quando visualizzi un singolo set, in cima all'editor appare una barra con il link "Mostra tutti nella cartella" per tornare rapidamente alla vista dell'intera cartella.

Toggle della sidebar

Una barra verticale tra la sidebar e l'editor nasconde il pannello sinistro — utile quando hai bisogno di più spazio per l'editor. Lo stato viene memorizzato tra le sessioni. Dopo aver mostrato/nascosto, CodeMirror aggiorna automaticamente la propria larghezza.

Ridimensionamento degli editor

Sotto ogni editor (CSS, JS, codice dell'azione) c'è una barra orizzontale con una maniglia da trascinare verticalmente. Afferra con il mouse e tira verso il basso per ingrandire l'editor. Altezza minima 80px, massima illimitata — la pagina scorre naturalmente con il contenuto.

Sopra ogni editor di codice CodeMirror — CSS e JavaScript nella scheda del set e „Codice JS" nell'editor dell'azione — si trova una barra di ricerca: un campo di testo e un pulsante con l'icona della lente.

Scorciatoie

ScorciatoiaAzione
EnterCerca (nuova query) o passa al risultato successivo (quando la query è invariata)
Shift+EnterRisultato precedente
Ctrl+Alt+→ / Ctrl+Alt+←Risultato successivo / precedente — funziona dall'editor e dal campo di ricerca
Ctrl+Alt+FDall'editor di codice sposta il focus al campo di ricerca
EscSvuota il campo di ricerca

Pattern URL

Il pattern URL definisce su quali pagine la cartella si attiva.

PatternCorrisponde a
https://justzix.com/adminSolo questo URL esatto
https://justzix.com/*Tutte le pagine su justzix.com
https://*.justzix.com/*Tutti i sottodomini e le pagine
*://localhost:*/*Tutte le applicazioni locali
https://example.com/admin/*Solo la sezione /admin/ e le sottopagine
*example*Qualsiasi URL contenente "example"
Suggerimento: la corrispondenza ignora la query string (?id=123) e l'hash (#section), a meno che non li inserisca nel pattern.

Stati dei set (Attivo / Abilitato)

Ogni set ha due flag indipendenti:

FlagSignificato
AttivoIndica se questo set è controllato dall'interruttore della cartella e del gruppo (entrambi i livelli cascano verso le active rules). Abilitare la cartella o il gruppo abilita tutti i set attivi all'interno.
AbilitatoStato corrente: indica se il set è attualmente iniettato sulle pagine.

Cascata degli interruttori

Toggle della cartella  →  cambia enabled di tutte le active rule nei suoi gruppi
Toggle del gruppo      →  cambia enabled di tutte le active rule di questo gruppo
Toggle del set         →  cambia solo enabled di questo set

Le regole con Attivo: NO (badge ○) vengono ignorate nelle cascate — le controlli solo manualmente, indipendentemente dallo stato della cartella e del gruppo.

Esempi pratici

Set sempre manuale

Attivo: NO • Abilitato: controllato manualmente

Il set non reagisce all'abilitazione dell'intera cartella. Lo controlli solo manualmente. Ideale per modifiche sperimentali che non vuoi attivare in blocco.

Set sempre abilitato con la cartella

Attivo: SÌ • Abilitato: SÌ

Impostazione standard. L'abilitazione/disabilitazione della cartella controlla anche questo set.

Set temporaneamente disabilitato

Attivo: SÌ • Abilitato: NO

Il set è "collegato" alla cartella, ma momentaneamente disabilitato. Il prossimo clic sull'interruttore principale della cartella lo riattiverà.

Pulsante flottante e pannello

AzioneEffetto
Clic sinistroToggle di tutte le cartelle corrispondenti (abilita/disabilita)
Clic destroApre il pannello con l'elenco di cartelle e set
TrascinamentoSpostamento della posizione (memorizzato per finestra)

Nel pannello a tendina (clic destro) puoi:

Il pannello mostra solo i set attivi (●) — quelli indipendenti (○) sono nascosti per concisione. Quando la cartella ha un solo gruppo chiamato "Predefinito", l'intestazione del gruppo viene omessa — si vedono solo i set.

Nascondere il pulsante flottante per una pagina: nel widget popup dell'estensione — clicca l'icona JustZix accanto all'indirizzo e premi l'icona „eye-off" accanto al nome della cartella. Ripristino con il link „Ripristina pulsante flottante" lì stesso.

Il clic sull'icona JustZix nella barra delle estensioni di Chrome apre il widget popup — un pannello di controllo compatto per la scheda corrente. Dall'alto:

Barre di azioni (ActionBars)

In un singolo workspace puoi avere più barre di azioni — ciascuna con il proprio nome, orientamento, colore di sfondo, proprio set di pulsanti e posizione indipendente per finestra del browser. Una barra può essere assegnata a una cartella, a un gruppo o a un singolo set (questo determina la visibilità e la cascata).

Creazione e modifica di una barra

Nell'editor di cartella, gruppo o set si trova il pulsante „Barre di azioni (N)". Il clic apre la modale di gestione delle barre. Nella modale:

Visibilità ereditata verso il basso

Assegnazione di un'azione a una barra

Ogni azione nella scheda „Azioni" della scheda del set ha un dropdown „Barra di azioni" — scegli la barra di destinazione dall'elenco di quelle visibili per quel set (barre proprie del set + barre del gruppo + barre della cartella).

Aggancio delle barre (snap & connect)

Durante il trascinamento di una barra, l'estensione rileva i bordi delle barre adiacenti e del pulsante flottante a una distanza ≤ 12 px. Appare un indicatore visivo sticky e, dopo il rilascio, le barre si uniscono in un gruppo di connessioni. Quindi:

Clic destro sulla maniglia di trascinamento della barra → menu contestuale:

In modalità di modifica della barra questo menu è disattivato; il clic destro su un'etichetta dà allora l'opzione „Elimina etichetta".

Mostra/nascondi barre — da 3 punti

Per abilitare/disabilitare in modo permanente le barre di azioni (senza F5) l'estensione offre tre punti di accesso, tutti mappati sullo stesso actionBar.enabled nello storage — una modifica da un punto si propaga al pannello di modifica e alle altre UI:

  1. Floating panel (clic destro sul pulsante flottante principale JustZix) — sezione „Barre di azioni" sotto l'elenco di cartelle/gruppi/set. Il checkbox per barra mostra lo stato persistente. Clic → toggle actionBar.enabled.
  2. Widget popup (clic sull'icona dell'estensione accanto all'indirizzo) — sezione „Barre di azioni" sotto l'elenco delle cartelle. Più una piccola icona „eye-off" per cartella — nasconde il pulsante flottante per la pagina corrente (ripristino con il link „Ripristina pulsante flottante").
  3. chrome.contextMenus (clic destro sulla pagina → JustZix → Barre di azioni) — sottomenu dinamico con un checkbox per barra. L'elenco viene ricostruito per scheda attiva e a ogni cambio di stato.
Persistent vs runtime hide:
Le posizioni di tutte le barre (e del pulsante flottante) vengono salvate per finestra del browser nella memoria di sessione. Ogni finestra ha le proprie posizioni, indipendentemente dalle altre. Si resettano alla chiusura della finestra o al riavvio di Chrome.

Modalità di modifica della barra — layout libero

La modalità di modifica della barra di azioni si attiva in tre modi: con la scorciatoia Ctrl+Alt+S (funziona da qualsiasi punto della pagina), con l'interruttore nel widget popup dell'estensione e dal menu contestuale di Chrome (clic destro → „Modalità di modifica della barra di azioni"). In cima allo schermo appare una barra informativa; usando di nuovo uno qualsiasi degli interruttori si esce dalla modalità.

In modalità di modifica il normale funzionamento degli elementi è sospeso (il clic non esegue codice, i campi non ricevono il focus) — gli elementi possono invece essere disposti e ridimensionati:

La modalità di modifica è „rigida": lo spostamento e il ridimensionamento si agganciano alla griglia da 8 px, un elemento non può essere tirato fuori dalla barra né posato su un altro — in caso di collisione entrambi gli elementi (quello spostato e quello sottostante) ricevono un riquadro rosso e, dopo il rilascio, l'elemento torna alla posizione precedente. La barra non può essere rimpicciolita al punto da far finire un elemento all'esterno; quando un nuovo elemento o un'etichetta non entra nella barra, il canvas della barra si ingrandisce automaticamente. Il clic destro del mouse sulla barra in modalità di modifica non mostra il menu „nascondi/scollega barra".

Modalità di layout della barra: la barra parte in modalità flow (flexbox classico — elementi uno dopo l'altro, verticalmente o orizzontalmente). Il primo spostamento o ridimensionamento di un elemento converte la barra in modalità custom (canvas con posizionamento libero) — visivamente senza cambiamenti, perché il layout corrente viene salvato come snapshot punto di partenza.

Le posizioni e le dimensioni in modalità custom (bar.layoutMode, bar.size, action.layout, action.size) vengono salvate in modo permanente e sincronizzate tra dispositivi — a differenza della posizione di „fluttuazione" della barra sulla pagina, che resta per finestra del browser.

Tipi di azione: BUTTON / SELECT / INPUT / SLIDER / TEXTAREA / TOGGLE3

Ogni azione ha un tipo — selezionato con un dropdown all'inizio di ciascuna azione nella scheda del set. Sono disponibili 6 tipi:

TipoUIQuando esegue il codice
BUTTONPulsante cliccabile con label di max 6 carattericlic dell'utente
SELECT staticDropdown personalizzato in stile barra — le opzioni si configurano nella modalescelta di un'opzione (value = option.value)
SELECT jsElemento nativo <select> — il tuo codice popola le opzioni e collega l'handlerUNA volta al render ($el = <select>)
INPUTCampo di testo con placeholder (single line)change (Enter o blur)
SLIDERCursore <input type="range"> con label + value displaychange (rilascio del mouse / Enter), value = numero
TEXTAREACampo multiriga — Enter è un newline reale (NON esegue il codice)change (blur — uscita dal campo)
TOGGLE3Segmented control a 3 stati (radio-like) — 3 mini-pulsanti, uno attivoclic su uno stato non attivo, value = state.value dell'attivo, più stateIdx e stateLabel nello scope

Le etichette di testo statiche non sono un tipo di azione — si aggiungono direttamente sulla barra in modalità di modifica (vedi „Modalità di modifica della barra" → etichette).

Campi comuni

SELECT — modale delle opzioni

Il clic su „Opzioni (N)" nella scheda dell'azione di tipo SELECT apre la modale:

INPUT — modale di configurazione

SLIDER — modale di configurazione

TEXTAREA — modale di configurazione

TOGGLE3 — modale di configurazione

Persistent memory (SELECT, INPUT, SLIDER, TEXTAREA, TOGGLE3)

La scelta / il valore / la posizione del cursore / il contenuto della textarea / lo stato attivo del toggle3 vengono memorizzati automaticamente per azione. Dopo F5 il valore torna; anche dopo aver chiuso la scheda e riaperta (su una pagina che corrisponde alla regola). Singleton per action.id — un unico valore indipendente dallo specifico URL.

Formato del valore in memory per tipo:

Storage:

Nessuna sincronizzazione cross-device: la memory resta locale. Due computer possono avere valori diversi (es. un filtro diverso per utente).

Security: il sessionStorage è leggibile dagli script della pagina (same origin). Per dati sensibili non usare INPUT — scrivi invece il valore direttamente nel campo „Codice JS" del set.

ID stabile dell'azione

Ogni azione ha un action.id immutabile (formato a_<base36>_<random>). Nella scheda del set, accanto a ogni azione, c'è un badge con il numero di riga — il clic copia l'ID completo negli appunti, il tooltip mostra l'ID completo.

In user-JS fai riferimento tramite data-jz-action-id:

const el = document.querySelector('[data-jz-action-id="a_mp1deeq3_uimd8l"]');
el.value = 'nuovo valore';
el.dispatchEvent(new Event('change'));

Oppure tramite gli helper window.JZ — vedi Invocazione programmatica delle azioni da JS.

Clic destro su una qualsiasi pagina → JustZix:

I sottomenu delle finestre vengono ricostruiti su: tabs.onActivated, tabs.onUpdated (URL change) e storage.onChanged per folders/groups/rules/actionBars/cssPanes/jsPanes/jsConsoles/outputConsoles/floatingHidden. Il sottomenu TEMP è statico (sempre 4 voci).

Finestre sul front-end (CSS / JS / Console)

L'estensione offre quattro tipi di finestre flottanti iniettate sulle pagine, accanto alle barre di azioni. Ogni finestra è assegnata a una cartella, a un gruppo o a un set (eredita la visibilità a cascata, come le barre di azioni) e appare sulle pagine corrispondenti per URL.

Gestione: nell'editor di cartella / gruppo / set trovi il pulsante „Finestre ▾ (N)". Il clic apre un menu con 4 tipi — scegli il tipo, si apre una modale con l'elenco delle finestre di quel livello (più le finestre ereditate dai livelli superiori). Aggiungi, dai un nome, colori, elimini.

TipoColoreA cosa serve
CSS paneverdeTextarea CSS iniettata in tempo reale come <style>
JS paneamberTextarea JS eseguita a ogni modifica del codice
JS ConsoleviolaREPL — digiti il codice, Ctrl+Enter lo esegue, l'output sotto
Output ConsolesmeraldoAnteprima in sola lettura dei log della pagina (console.* + errori)

CSS pane

Finestra flottante con un campo di testo per il CSS. Ogni modifica (dopo una breve pausa) aggiorna lo <style> iniettato — vedi l'effetto in tempo reale. Il contenuto è memorizzato per scheda del browser (sopravvive a F5, scompare con la chiusura della scheda). Ideale per testare rapidamente il CSS senza salvarlo in una regola.

JS pane

Un campo di testo per il JavaScript eseguito nel contesto della pagina. Il codice viene eseguito dopo una modifica (con un ritardo) oppure manualmente con il pulsante ▶ Run / la scorciatoia Ctrl+Enter. Gli errori di esecuzione appaiono in una barra rossa sotto il codice. Quando il codice è stato modificato dall'ultima esecuzione, il pulsante Run si illumina di giallo (stato „dirty").

JS Console (REPL)

Una console a tutti gli effetti dentro la pagina. Digiti il codice nel campo inferiore, Ctrl+Enter (o ▶) lo esegue, il risultato viene aggiunto all'area dei log sopra. Funzioni:

Input, output e cronologia sono memorizzati per scheda. La console esegue il codice nel MAIN world della pagina — hai accesso a tutte le variabili e funzioni della pagina.

Output Console

Anteprima dei log in sola lettura — intercetta automaticamente tutto ciò che accade sulla pagina: console.log/warn/error/info/debug, eccezioni non catturate, Promise rejection non gestite, traffico di rete e push verso dataLayer, oltre al tuo logger personalizzato window.JUSTZIX.*. A differenza della JS Console (dove digiti tu il codice) — qui i log scorrono da soli.

Sei schede con contatori

La finestra è divisa in 6 schede, ciascuna con un contatore di voci (badge):

SchedaContenuto
AllTutte le voci da tutte le sorgenti, in ordine cronologico
JZconsoleSolo il tuo logger window.JUSTZIX.*
ConsoleSolo i console.log/info/warn/error/debug standard della pagina
NetworkLe richieste di rete della pagina (tramite chrome.webRequest)
ErrorsEccezioni non catturate e Promise rejection — con dettagli espandibili
DataLayerPush verso window.dataLayer (GTM) + anteprima live dell'oggetto

Barra dei filtri contestuali

Tra le schede e il campo di ricerca c'è una barra dei filtri che cambia in base alla scheda selezionata:

Ricerca

Sotto la barra dei filtri c'è un campo di ricerca sempre visibile. Filtra in tempo reale le voci della scheda attiva (corrispondenza parziale, senza distinzione tra maiuscole e minuscole). Esc svuota il campo.

Log della console — comprimibili come in DevTools

Le voci console.* sono per default compresse — mostrano un'anteprima abbreviata (es. [PickupMap][2026-05-16T15:25Z] AUTO_SELECTION_SKIPPED: {reason: 'Lower priority source', …}). Il clic espande gli argomenti completi (oggetti/array come albero JSON espandibile), analogamente alla console di DevTools.

Scheda Network

Network intercetta le richieste tramite chrome.webRequest (permesso webRequest nel manifest). Ogni voce mostra tra l'altro il metodo, l'URL, lo stato, il tipo di risorsa, la dimensione, la durata, l'indirizzo remoto (Remote address) e l'iniziatore (Initiator). Il buffer delle richieste è mantenuto in background, quindi appaiono anche le voci precedenti all'apertura della finestra.

Scheda DataLayer

La finestra DataLayer è divisa in due colonne:

I clic sull'interfaccia propria di JustZix (espansione dei nodi dell'albero, pulsanti della finestra) non vengono inviati a questa scheda. Se la pagina raccogliesse gli eventi click (ad es. l'auto-event di GTM), un clic nella finestra genererebbe un push verso dataLayer e reimposterebbe l'espansione dell'albero — l'estensione riconosce questi push e non li riporta (il vero window.dataLayer della pagina rimane intatto).

Logger personalizzato — window.JUSTZIX

La Output Console mette a disposizione un'API globale per il logging dal tuo codice (JS pane, azioni, codice della pagina):

JUSTZIX.log('log normale');
JUSTZIX.warn('avviso');
JUSTZIX.error(new Error('errore'));   // mostrerà lo stack trace
JUSTZIX.info({ obj: 1, arr: [2,3] });
JUSTZIX.debug('dettagli');            // nascosto per default (filtro)

Alias disponibili:

Dopo la comparsa della Output Console, nel log vedrai una riga di benvenuto che indica quale alias è disponibile su quella pagina.

Cosa viene intercettato

Gli errori delle richieste fetch/XHR non finiscono nella scheda Errors (non sono eccezioni JS) — li trovi nella scheda Network con stato 4xx/5xx. Non catturiamo violazioni CSP né avvisi interni di Chrome.

Guida rapida — Ctrl+Shift+H

Ctrl+Shift+H apre una finestra spostabile di guida rapida — una guida all'uso di JustZix sulla pagina: scorciatoie globali, scorciatoie dentro le finestre, la Console Output, gestione delle finestre col mouse, la modalità modifica barra e il logging nella Console Output. Funziona su qualsiasi pagina. Trascini la finestra per l'intestazione; Esc / clic fuori / × / nuovo Ctrl+Shift+H la chiude.

Personalizzazione dell'aspetto della finestra

Colori: nella modale di gestione (pannello di modifica) ogni finestra ha un color picker — il puntino dell'intestazione, lo sfondo e il testo dell'intestazione, lo sfondo e il testo del body, il colore dei pulsanti azione.

Font e dimensione: clic destro sulla barra dell'intestazione della finestra → menu con la scelta del font (Consolas, Menlo, Monaco, Courier New e altri monospace) e della dimensione (10–24 px).

Trascinamento, aggancio e collegamento

Ogni finestra si trascina per la barra dell'intestazione. Avvicinando un bordo a un'altra finestra / barra di azioni / pulsante flottante (≤ 12 px) appare un'attrazione magnetica — le finestre si agganciano in un gruppo. Il trascinamento di un gruppo agganciato sposta tutti gli elementi insieme. Le posizioni sono memorizzate per finestra del browser.

Ridimensionamento della finestra

Ogni finestra ha 8 maniglie di resize: 4 negli angoli (cambio di larghezza e altezza contemporaneamente) e 4 sui bordi (cambio di un solo asse). La maniglia trascinata mantiene il bordo opposto al suo posto. Intervallo: larghezza 180–1200 px, altezza 120–900 px. La nuova dimensione (pane.size) viene salvata — per le finestre persistenti sincronizzata tra dispositivi, per le finestre TEMP per scheda.

Scorrimento all'interno della finestra

Lo scorrimento con la rotellina del mouse all'interno di una finestra fa scorrere solo il contenuto di quella finestra — la pagina sottostante non scorre. Questo vale anche quando l'area della finestra raggiunge la fine dello scorrimento o quando il cursore si trova su una parte non scorrevole (l'intestazione, la barra dei filtri).

Clic destro sull'intestazione della finestra

Pulsante di chiusura e doppio clic sull'intestazione

Ogni finestra (sia temporanea TEMP sia persistente) ha un pulsante × di chiusura nell'angolo destro dell'intestazione. Le TEMP vengono nascoste (riaprile dal menu contestuale della pagina o con una scorciatoia), le persistenti — disattivate (riattivale con la casella nel popup). Doppio clic sulla barra dell'intestazione:

Aggancio ed evidenziazione del bordo

Quando il bordo di una finestra si avvicina a un'altra finestra JustZix (soglia 12 px), appare un bordo rosso sul lato di aggancio (su entrambe le finestre). Rilasciare il cursore in questa posizione esegue lo snap — le finestre si muovono poi come gruppo. Tutte le finestre dell'estensione partecipano a questo meccanismo: barre di azioni, FAB, pannelli persistenti (CSS/JS/Console/Output), TEMP e l'AI Helper.

TEMP pane — finestre temporanee

Puoi creare una finestra temporanea su qualsiasi pagina — anche una per cui non hai nessuna cartella. I TEMP pane sono uno strumento ad-hoc rapido: testi CSS/JS su una pagina estranea senza configurare regole.

Caratteristiche dei TEMP pane:

Creazione / chiusura (toggle):

AI Helper — assistente IA

L'AI Helper è un assistente IA integrato nell'estensione che aiuta a preparare e implementare una soluzione CSS/JS per un compito specifico sulla pagina corrente. Il modello può esaminare la pagina, testare il codice in tempo reale nelle finestre TEMP e — dopo la tua accettazione — creare una cartella, un gruppo e un set pronti.

Configurazione delle chiavi API

Nel menu Impostazioni della sidebar la voce „AI Helper" apre la modale di configurazione:

Sicurezza delle chiavi: le chiavi API sono per default conservate esclusivamente nella memoria locale di questo dispositivo (chrome.storage.local). Una chiave arriva su altri dispositivi solo se selezioni il checkbox „sincronizza" accanto ad essa — in tal caso viene sincronizzata tramite il cloud di JustZix (lo stesso canale con cui l'estensione sincronizza cartelle, gruppi e set). Le chiavi senza la selezione non lasciano mai il dispositivo. Le chiamate API passano attraverso il service worker dell'estensione, quindi la chiave non finisce nel contesto della pagina.

Finestra di chat

La finestra dell'AI Helper è una finestra flottante (per scheda, come le finestre TEMP — trascinabile, ridimensionabile con 8 maniglie, croce di chiusura, una sola istanza). La apri / chiudi:

Nella finestra: scelta del provider (quando hai più di una chiave) e del modello (elenco recuperato in tempo reale), cronologia della conversazione, pulsante per svuotare la conversazione e un campo di testo (invio con un pulsante o con Ctrl+Enter). Il modello riceve automaticamente il contesto della pagina corrente — URL, titolo e un frammento di HTML.

Workflow agentico

L'AI Helper conduce la conversazione secondo un workflow stabilito:

  1. Chiede dettagli — ambito URL, nomi di cartella/gruppo/set, colori, l'obiettivo esatto.
  2. Esamina la pagina con lo strumento query_page (selettori, struttura DOM) prima di scrivere il codice.
  3. Inserisce il codice CSS/JS preparato in una finestra temporanea TEMP, che vedi in tempo reale sulla pagina.
  4. Verifica gli errori da solo — con gli strumenti read_temp_pane e read_console controlla che il codice testato non segnali errori prima di mostrarti il risultato.
  5. Chiede di verificare l'effetto e domanda esplicitamente se il test è riuscito.
  6. Quando il test non riesce — corregge il codice e testa di nuovo.
  7. Solo dopo la tua conferma rende permanente la soluzione: crea una cartella → un gruppo → un set, e se necessario anche una barra di azioni e azioni. Ogni creazione di un'entità richiede una conferma separata nell'estensione.

Il modello usa gli strumenti tramite un semplice protocollo testuale (blocco @@JZ_TOOL@@ … @@END@@) che funziona in modo identico per OpenAI, Anthropic e Gemini. Le chiamate degli strumenti e i loro risultati appaiono nella finestra come „chip" separati. Strumenti disponibili:

StrumentoAzione
query_pageRestituisce il numero di corrispondenze del selettore e l'HTML fino a 5 elementi
list_structureRestituisce le cartelle / gruppi / set esistenti con i loro id
open_temp_paneApre una finestra temporanea TEMP (CSS o JS)
set_temp_pane_codeInserisce il codice nella finestra TEMP — serve per i test in tempo reale
read_temp_paneVerifica la finestra TEMP — per il JS esegue il codice e restituisce errore o successo
read_consoleApre una finestra TEMP Output Console e restituisce le voci console catturate della pagina
create_folderCrea una cartella + il gruppo predefinito (richiede conferma)
create_groupCrea un gruppo nella cartella (richiede conferma)
create_ruleCrea un set con codice CSS/JS (richiede conferma)
create_barCrea una barra di azioni associata a cartella/gruppo/set (richiede conferma)
create_actionCrea un'azione (button/select/input/slider/textarea/toggle3) su una barra (richiede conferma)
request_user_inputMostra all'utente un form inline nella finestra di chat (campi testo / numero / colore / select / checkbox) e attende la risposta
list_bars / list_actions / list_panes / list_allRestituiscono elenchi di barre di azioni / azioni / finestre (CSS/JS/Console/Output) esistenti — opzionalmente filtrate per genitore
read_folder / read_group / read_rule / read_bar / read_actionRestituiscono i dati completi di un'entità specifica (prima di una modifica pianificata)
update_folder / update_group / update_rule / update_bar / update_actionModificano un'entità esistente — richiede conferma (con un diff dei campi)
create_css_pane / create_js_pane / create_js_console / create_output_consoleCreano una finestra persistente sul frontend (richiede conferma)
read_*_pane / read_*_console + update_*_pane / update_*_consoleLettura e modifica dei metadati delle finestre persistenti (nome, colore, posizione, dimensione, stile)
read_pane_code / update_pane_codeLettura e inserimento del codice CSS/JS in una finestra persistente (per scheda del browser) — richiede conferma
screenshot_pageCattura della vista corrente della pagina come immagine — l'interfaccia di JustZix viene nascosta automaticamente; per modelli compatibili vision
L'AI Helper può creare, leggere e modificare l'intera struttura dell'estensione (cartelle / gruppi / set / barre / azioni / finestre persistenti), verificare da solo gli errori del codice testato (read_temp_pane + read_console), chiederti dati tramite un form inline (request_user_input) e fare screenshot della pagina (screenshot_page) come immagini allegate alla richiesta successiva.

Aspetto della finestra AI Helper

Un clic destro sulla barra dell'intestazione della finestra AI Helper apre un menu con le opzioni «Porta avanti» / «Porta dietro» (cambiare l'ordine delle finestre JustZix quando si sovrappongono), «Scollega da: X» (quando AI Helper è agganciato a un'altra finestra) e «Aspetto…». Il pannello «Aspetto…» permette di stilizzare separatamente quattro ruoli nella conversazione: i tuoi messaggi, le risposte dell'IA, i risultati degli strumenti, i form inline — ciascuno con font, dimensione, colore del testo e di sfondo propri. I valori sono salvati per dispositivo.

Aggancio con altre finestre e Z-order

La finestra AI Helper partecipa allo stesso meccanismo di aggancio delle barre di azioni, delle finestre persistenti (CSS / JS / Console / Output) e delle finestre TEMP. Trascinare un bordo vicino a un'altra finestra JustZix (soglia 12 px) → attrazione magnetica, un bordo rosso indica il lato di aggancio su entrambe le finestre. Le finestre agganciate si muovono come gruppo.

Quando le finestre si sovrappongono, le opzioni «Porta avanti» / «Porta dietro» nel menu contestuale di ogni finestra (clic destro sull'intestazione) fanno un salto unico — la finestra passa sopra / sotto tutti i vicini in sovrapposizione, non serve cliccare più volte.

Screenshot della pagina (per modelli vision)

Lo strumento screenshot_page cattura la vista corrente della pagina e la invia al modello come immagine. L'intera interfaccia di JustZix viene nascosta automaticamente prima della cattura (FAB, barre di azioni, AI Helper, pannelli persistenti, TEMP). Un buffer dei 3 screenshot più recenti, allegati una sola volta alla richiesta successiva (dopo l'invio — rimossi dal buffer per risparmiare token). Richiede un modello compatibile vision (es. gpt-4o, claude-3+/4, gemini-1.5+/2). Sotto il chip di risultato nella chat, viene mostrata una miniatura — un clic apre la vista a schermo intero.

Scorciatoie da tastiera

Globali (funzionano da qualsiasi punto della pagina)

ScorciatoiaAzione
Ctrl+Alt+GCrea / chiudi TEMP CSS pane
Ctrl+Alt+HCrea / chiudi TEMP JS pane
Ctrl+Alt+JCrea / chiudi TEMP JS Console
Ctrl+Alt+KCrea / chiudi TEMP Output Console
Ctrl+Alt+IApri il pannello di modifica (finestra separata), primo set attivo su questa pagina, scheda CSS
Ctrl+Alt+OCome sopra, scheda JS
Ctrl+Alt+PCome sopra, scheda Azioni
Ctrl+Alt+\Apri / chiudi la finestra AI Helper
Ctrl+Alt+SModalità di modifica della barra di azioni — abilita / disabilita
Ctrl+ZAnnulla l'ultima modifica (solo in modalità di modifica della barra)
DeleteElimina le etichette selezionate (solo in modalità di modifica della barra)
EscDeseleziona tutti gli elementi (solo in modalità di modifica della barra)
Ctrl+Shift+LSvuota la scheda attiva di ogni Output Console
Ctrl+Shift+HGuida rapida — scorciatoie e finestre sulla pagina (ovunque)

All'interno di una finestra (quando ha il focus)

ScorciatoiaAzioneFinestra
Ctrl+EnterEsegui il codice / invia il messaggioJS pane, JS Console, AI Helper
/ Cronologia dei comandiJS Console (input)
Ctrl+LSvuota l'outputJS Console
EscSvuota il campo di ricercaOutput Console

Editor di codice (pannello di modifica)

ScorciatoiaAzione
Ctrl+Alt+FFocus sul campo di ricerca sopra l'editor
Ctrl+Alt+→ / Ctrl+Alt+←Risultato di ricerca successivo / precedente
Enter / Shift+EnterCerca / risultato successivo / precedente (nel campo di ricerca)
Ctrl+Alt+I / O / PCambia la scheda del set attivo a CSS / JS / Azioni (quando la card del set è renderizzata)
Perché queste combinazioni? Ctrl+Alt+G/H/J/K sono tasti vicini tra loro (layout Vim), tutti liberi su tutti i browser e sistemi. Ctrl+Alt+L è stato volutamente omesso — su Linux blocca lo schermo. Ctrl+Alt+S (modalità di modifica) e Ctrl+Alt+\ (AI Helper) sono nella stessa famiglia di modificatori. Le scorciatoie della Output Console (Ctrl+Shift+...) non collidono, perché si distinguono per modificatore.

Esportazione e importazione

L'estensione offre cinque formati di esportazione (completo, parziale, cartella, gruppo, set) con rilevamento automatico del tipo di file all'importazione, per evitare la sovrascrittura accidentale.

Esportazione — completa o di elementi selezionati

Nel menu Impostazioni della sidebar: Esporta impostazioni. La modale apre due modalità:

I file di esportazione parziale hanno il nome justzix-partial-DATA.json (vs. justzix-backup-DATA.json per quello completo) e all'interno il flag partial: true e il campo groups[].

Esportazione di una singola cartella (con selezione)

Nella barra della cartella: Esporta — apre una modale con l'albero di gruppi e set (analogamente all'esportazione parziale, ma limitata a quella cartella). Vengono esportati solo i set selezionati e i gruppi a cui appartengono — i gruppi vuoti non finiscono nel file.

Formato justzix-folder — il file contiene un campo groups[] con la gerarchia di gruppi e set della cartella.

Esportazione di un gruppo

Nella barra del gruppo: Esporta — una modale con l'elenco dei set del gruppo (checkbox). File: justzix-grupa-<nome>-<data>.json, formato justzix-group.

Esportazione di un singolo set

Nella vista del set: Esporta set — scarica subito il file (senza modale). Formato justzix-rule, nome: justzix-zestaw-<nome>-<data>.json.

Cinque formati di file:

Importazione — rilevamento automatico del tipo (modale di importazione completa)

Dopo aver caricato un file/incollato il JSON, l'estensione riconosce automaticamente il tipo e mostra un pannello di rilevamento colorato:

ColoreSignificatoAzione
Teal (turchese)Backup completo validoMostra il numero di cartelle/set, la data di esportazione, un avviso di sovrascrittura
ViolaBackup parziale (partial: true)Scelta della modalità: Unisci con le attuali o Sostituisci tutto
ArancioneTipo di file errato in questa modaleMessaggio che indirizza alla modale corretta, pulsante Importa bloccato
RossoErrore di parsing del JSON / formato non validoPulsante Importa bloccato

Modalità di importazione parziale (pannello viola)

Importazione di una singola cartella

Nella barra della cartella: Importa. Controlla i conflitti per ID e per nome:

Importazione di un gruppo

Nella barra del gruppo: Importa — accetta 3 formati:

Tutti i set del file finiscono nel gruppo corrente con nuovi ID (l'operazione è sempre di tipo "aggiungi copia" — nessun conflitto).

Importazione di un singolo set

Nella vista del set: Importa set — accetta solo justzix-rule. Prompt con 3 opzioni:

L'importazione completa sovrascrive tutte le impostazioni (a meno che non sia un backup parziale con modalità "Unisci"). Esegui un'esportazione prima dell'importazione, per avere un backup.

Applicazioni pratiche dell'esportazione parziale

Sincronizzazione cloud

Impostazioni → Sincronizzazione cloud apre la modale dell'account di sincronizzazione. L'estensione mantiene la tua libreria (cartelle, gruppi, set, azioni, barre di azioni, finestre sul front-end) nel cloud di justzix.com e la mantiene coerente tra i dispositivi. La sincronizzazione funziona solo dopo l'accesso — senza un account l'estensione funziona solo in locale.

Account e chiave di sincronizzazione

Prima sincronizzazione — risoluzione dei conflitti

Durante l'accesso, l'estensione confronta i dati locali con i dati nel cloud:

SceltaCosa fa
Usa i dati del cloudSvuota la libreria locale e ricostruisce lo stato dell'account dal server
Invia i miei dati localiI dati locali diventano canonici — elimina ciò che era nel cloud
UnisciCombina entrambi gli insiemi — aggiunge le entità mancanti, mantenendo quelle esistenti

Puoi anche fare Annulla — l'estensione esegue allora la disconnessione e non cambia nulla.

Sincronizzazione continua

Dopo la prima riconciliazione, la sincronizzazione gira in background: l'estensione invia le modifiche e scarica le nuove entità circa una volta al minuto. Una modifica fatta su un dispositivo compare sugli altri dopo poco tempo. Il pallino di stato accanto alla voce "Sincronizzazione cloud" indica se l'account è connesso.

Protezione dai fantasmi. Una cartella precedentemente eliminata su un dispositivo potrebbe "resuscitare" durante l'accesso su quello successivo. L'estensione ora recupera dal server l'elenco delle entità eliminate (tombstones) e non rimanda indietro qualcosa che è stato eliminato altrove.

Scheda Stato — libreria nel cloud, cronologia, azioni

La scheda Stato della modale di sincronizzazione mostra lo stato dell'account e offre i pulsanti delle azioni:

Libreria nel cloud

Contatori delle entità presenti sull'account: cartelle, gruppi, set, azioni, barre di azioni, finestre sul front-end. Vengono conteggiate solo le entità raggiungibili nell'albero (un gruppo deve avere una cartella esistente, un set — un gruppo, una barra/finestra — un genitore esistente) — in modo coerente con i contatori del Pannello. Si aggiornano all'apertura del pannello e dopo una sincronizzazione manuale.

Cronologia sincronizzazione

Un registro locale al dispositivo delle ultime sincronizzazioni. La pagina mostra le ultime 10 voci; il pulsante "Mostra cronologia completa" apre una finestra con l'elenco completo (fino a 100 voci). Ogni voce contiene:

Il registro è locale — non viene sincronizzato tra i dispositivi. Una voce viene creata dopo ogni ciclo di sincronizzazione che ha realmente cambiato qualcosa; un "Sincronizza ora" manuale lascia sempre una voce, anche senza alcuna modifica.

Cosa si sincronizza e cosa no

Le statistiche d'uso (applicazioni CSS, esecuzioni JS, visualizzazioni di finestre) sono sincronizzate come entità separate per-dispositivo — la scheda del Pannello le somma da tutti i dispositivi accoppiati. Il tema e la lingua sono sincronizzati come impostazione comune dell'account e applicati alla successiva apertura del pannello sull'altro dispositivo.

Condivisione tramite link (Shares)

Un'alternativa all'invio di un file JSON su una chat. Generi un link pubblico con una durata di vita (1h / 6h / 12h / 24h / 48h) e lo passi al destinatario. Il backend justzix.com conserva il payload nel cloud fino alla scadenza, poi viene eliminato.

Richiede un account di sincronizzazione (Sync) connesso. Il token stesso è un secret pubblico — chiunque abbia il link può scaricare, quindi non inviarlo su canali pubblici se il contenuto è sensibile.

Formato del token

JZS-XXXX-XXXX-XXXX-XXXX (16 caratteri Crockford base32, ~80-bit di entropia). Viene accettato anche l'intero URL https://www.justzix.com/s/JZS-... — l'estensione lo analizza e normalizza (lettere ambigue I/L→1, O→0, U→V).

Limiti dell'account

Il superamento del limite = un errore con un messaggio. Revoca i link inutilizzati nel pannello I miei share.

Creazione di un link (mittente)

Il pulsante „Condividi URL" in quattro punti di accesso, accanto a „Scarica file":

Il clic apre la modale di generazione del link: subject + summary di cosa condividi, radio con il TTL (predefinito 24h), „Genera link". Dopo il successo la modale passa alla vista del risultato con due valori copiabili:

Ognuno ha il proprio pulsante „Copia". È mostrato anche l'orario di scadenza nel fuso orario locale.

Pannello „I miei share"

Impostazioni → I miei share (una modale separata, non parte della sincronizzazione — sono due funzionalità diverse). Mostra l'elenco dei link attivi: un counter nell'intestazione X/20 attivi · Y MB / 50 MB e, per ogni share, una scheda con:

La revoca non ritira il contenuto già scaricato. Se qualcuno ha fatto in tempo a scaricare il payload, lo ha localmente. Lo share è un "best-effort time-limit", non un DRM.

Importazione da un link (destinatario)

Impostazioni → Importa da URL (tra „Importa impostazioni" e „Sincronizzazione cloud", icona della catena). La modale ha due passaggi:

Passo 1 — input. Incolli il link o solo il token. Validazione client-side: il token viene estratto dall'URL, normalizzato Crockford-base32, vengono verificati 16 caratteri + il formato. Formato errato → un messaggio con un suggerimento sul formato corretto.

Passo 2 — preview. L'estensione mostra il riepilogo dello share:

Se lo share contiene JavaScript (jsLines > 0) — appare un banner di avviso rosso con il link „Mostra codice JavaScript". Apre un overlay con il codice JS completo di ogni regola e azione — controllalo prima di importare, perché il codice verrà eseguito sulle pagine corrispondenti.

Passo 3 — importazione. Clic su „Importa" → il backend restituisce il payload completo → l'estensione crea nuove entità con ID sempre nuovi (non sovrascrive mai quelle esistenti per ID):

TipoCosa accade
justzix-ruleCrea una nuova cartella + il gruppo „Predefinito" + il set importato
justzix-groupCrea una nuova cartella + il gruppo importato + i set
justzix-folderAggiunge come nuova cartella top-level
justzix-fullMerge: aggiunge tutti i folders/groups/rules con ID nuovi

Nome del nuovo container: <nome-del-mittente o "Import"> <data PL> — puoi poi rinominarlo / spostarlo a piacere.

Errori del destinatario

ErroreMessaggio
Token non valido„Il token non è valido. Verifica di aver copiato l'intero link."
404 not_found„Questo link è scaduto o è stato revocato dal mittente. Chiedine uno nuovo."
429 rate_limited„Troppi tentativi. Attendi un momento e riprova."
5xx / network„Problema con il server. Riprova."

Il backend non distingue un 404 „non è mai esistito" da un 404 „scaduto / revocato" — volutamente, per non rivelare se un token sia mai esistito.

Invocazione programmatica delle azioni da JS

Ogni azione (dalla scheda „Azioni" nella scheda del set) può essere invocata programmaticamente dal JS del set o dal codice di un'altra azione. Il namespace globale window.JZ viene installato nel MAIN world automaticamente prima di ogni esecuzione di user-JS.

API — azioni

ChiamataCosa fa
JZ.click(labelOrId)Clicca programmaticamente. Semantica per tipo di azione: BUTTONel.click(). SELECT static (pulsante con dropdown) → el.click() (apre il popup; l'utente sceglierà l'opzione manualmente). SELECT js (<select> nativo) → imposta value sulla prima opzione non-disabled e fa il dispatch di change. INPUT / TEXTAREA / SLIDERel.click() — attenzione: non cambia il valore né esegue l'handler change. Per impostare il valore: const el = JZ.action('LBL'); el.value = 'X'; el.dispatchEvent(new Event('change')). TOGGLE3el.click() colpisce il contenitore; per attivare uno stato specifico usa el.querySelector('.jz-toggle3-state[data-jz-state-idx="1"]').click(). Restituisce true/false.
JZ.value(labelOrId)Getter unificato del valore corrente. INPUT / TEXTAREA → el.value nativo. SLIDER → wrap.dataset.jzValue (wrap è un DIV, il renderer imposta il data attr dall'iniziale + su input/change). SELECT(js) → el.value nativo. SELECT(static) → el.dataset.jzValue (il renderer lo imposta a ogni scelta). TOGGLE3 → el.dataset.jzValue (state.value dell'attivo; fallback a state.label). BUTTON → null. Elemento non trovato → null.
JZ.setValue(labelOrId, value)Setter programmatico. INPUT/TEXTAREA → el.value = String(v) + dispatch input+change. SLIDER → imposta il <input.jz-action-slider> nativo + dispatch. SELECT(js) → el.value = String(v) + dispatch change. SELECT(static) + TOGGLE3 → invia un CustomEvent 'jz-set-value', un listener in content.js esegue l'intero flow (memory + UI + esegue il codice). Lookup TOGGLE3: per state.value → fallback a state.label → fallback all'idx numerico 0-2. BUTTON → false. Restituisce true/false.
JZ.action(labelOrId)Restituisce l'elemento dell'azione (button / select / input / textarea / slider / contenitore toggle3) o null. Lookup: prima per data-jz-action-id, poi case-insensitive per data-jz-key (label in MAIUSCOLO). Funziona per tutti i 6 tipi di azione.
JZ.actionById(id)Lookup esclusivamente per il action.id stabile (es. 'a_mp1deeq3_uimd8l'). Consigliato per azioni senza label o quando vuoi certezza.
JZ.actions()Array di tutti gli elementi azione visibili (button + select + input + textarea + slider + toggle3) sulla pagina corrente.
JZ.labels()Array delle etichette originali (case conservato come l'hai digitato).

Esempio — lettura e impostazione dei valori

// === Lettura ===
const filter = JZ.value('FILT');           // INPUT/TEXTAREA — string
const opacity = JZ.value('OPAC');          // SLIDER — string numeric ("75")
const mode = JZ.value('MODE');             // SELECT static — string (option.value)
const theme = JZ.value('THM');             // TOGGLE3 — state.value dello stato attivo

// === Impostazione ===
JZ.setValue('FILT', 'nuovo valore');       // INPUT/TEXTAREA — string + dispatch input+change
JZ.setValue('OPAC', 75);                   // SLIDER — clamp a min/max, dispatch input+change
JZ.setValue('SRT', 'prod');                // SELECT(js) — select nativo + dispatch change
JZ.setValue('MODE', 'staging');            // SELECT static — content.js esegue il flow (memory + UI + codice)
JZ.setValue('THM', 'dark');                // TOGGLE3 — lookup per state.value (fallback a label, poi idx)
JZ.setValue('THM', 2);                     // TOGGLE3 — equivalente; anche l'idx numerico funziona

API — barre e floating button

ChiamataCosa fa
JZ.bars()Tutti i contenitori .jz-actions-bar (ActionBar) visibili sulla pagina.
JZ.barById(id)L'elemento della barra per data-jz-bar-id.
JZ.floatingBtn()Il pulsante flottante principale #justzix-floating-btn o null (quando nascosto).
Il lookup in JZ.click / JZ.action è case-insensitive per label, ma esatto per il action.id stabile. Per le azioni senza label (tipicamente INPUT) usa JZ.actionById('a_...').

Context vars nel codice dell'azione

Nel campo „Codice JS" dell'azione hai automaticamente a disposizione delle variabili — iniettate come const dal background service worker prima dell'esecuzione:

VariabileCosa contieneQuando disponibile
$elL'elemento DOM di questa azione (input / select / button / textarea / contenitore toggle3)sempre quando esiste action.id
$action{ id, label, type, el }sempre
valueIl valore corrente per tipo: SELECT static → option.value; INPUT/TEXTAREA → contenuto del campo; SLIDER → numero; TOGGLE3 → state.value dello stato attivo (fallback a state.label quando value è vuoto).SELECT static, INPUT, TEXTAREA, SLIDER, TOGGLE3. SELECT js: il codice viene eseguito UNA volta al render — value è vuoto.
stateIdxInteger 0-2 — indice dello stato attivo (lo stato da cui è partito il clic).solo TOGGLE3
stateLabelString — label dello stato attivo (max 5 caratteri).solo TOGGLE3

Snippet nell'UI

Nella modale di configurazione dell'azione di tipo SELECT e INPUT il pannello „ID stabile dell'azione" mostra il action.id completo con un pulsante copy e un selettore JS di esempio (document.querySelector('[data-jz-action-id="..."]')). Sotto l'elenco dei BUTTON si vedono i chip JZ.click('LBL') — il clic su un chip copia lo snippet negli appunti.

Requisiti

Esempio — un'azione AUTO che invoca una sequenza

// Codice dell'azione "AUTO"
JZ.click('LOAD');                          // clic sull'azione LOAD (es. carica i dati)
setTimeout(() => JZ.click('PROC'), 500);   // 500ms dopo PROC (elabora)
setTimeout(() => JZ.click('SAVE'), 1500);  // 1500ms dopo SAVE (salva)

Esempio — JS del set che reagisce al DOM

Dopo la comparsa di un elemento dinamico, clicca l'azione che lo rimuove:

// Codice JS del set — observer su un modal che appare dinamicamente
const observer = new MutationObserver(() => {
  if (document.querySelector('.cookie-banner')) {
    JZ.click('CCK');  // clicca l'azione che rimuove il banner
    observer.disconnect();
  }
});
observer.observe(document.body, { childList: true, subtree: true });

Esempio — impostazione programmatica del valore di un INPUT

// JZ.click su un INPUT non cambia il valore — usa il pattern con il dispatch di 'change':
const el = JZ.action('SRCH');           // o JZ.actionById('a_mp1deeq3_uimd8l')
if (el) {
  el.value = 'nuovo filtro';
  el.dispatchEvent(new Event('change'));
}

Accesso diretto tramite DOM

Se preferisci lavorare con il DOM direttamente (es. cambi uno stile, non invochi):

// Lookup per ID stabile (consigliato — resistente al cambio di label):
const el = document.querySelector('[data-jz-action-id="a_mp1deeq3_uimd8l"]');

// Lookup per label (case-insensitive — MAIUSCOLO in data-jz-key):
const btn = document.querySelector('[data-jz-key="MYBT"]');
btn.style.opacity = '0.5';      // attenua
btn.dataset.busy = 'true';      // attributo personalizzato

Dove vivono gli elementi azione nel DOM:

Tipo di azioneContenitoreSelettore dell'elemento
BUTTON.jz-actions-bar[data-jz-bar-id="..."].jz-action-btn[data-jz-action-id="..."]
SELECT (static).jz-actions-bar.jz-action-select[data-jz-action-variant="static"] (button con popup; data-jz-value = valore attualmente selezionato)
SELECT (js).jz-actions-bar.jz-action-select.jz-variant-js (<select> nativo)
INPUT.jz-actions-bar.jz-action-input[data-jz-action-id="..."]
SLIDER.jz-actions-bar.jz-action-slider-wrap[data-jz-action-id="..."] (wrap); il cursore stesso: .jz-action-slider (<input type="range"> nativo)
TEXTAREA.jz-actions-bar.jz-action-textarea[data-jz-action-id="..."]
TOGGLE3.jz-actions-bar.jz-action-toggle3[data-jz-action-id="..."] (contenitore; data-jz-value = state.value dell'attivo); i pulsanti di stato: .jz-toggle3-state[data-jz-state-idx="0|1|2"], l'attivo ha la classe .active

Tutti gli elementi hanno l'attributo data-jz-action-id (identificatore stabile unico). Il selettore .jz-actions-bar è sicuro — non collide con il DOM della pagina.

Il lookup per label (data-jz-key) funziona per tutti i tipi di azione. Ogni elemento azione ha sia data-jz-label (case originale) sia data-jz-key (MAIUSCOLO). Per sicurezza (es. quando la label può cambiare) usa il data-jz-action-id stabile o JZ.actionById().

Funzionalità selezionate

Ricerca nella sidebar

Il campo "Cerca" filtra l'albero delle cartelle. Logica di corrispondenza:

Il match è case-insensitive, l'evidenziazione in giallo mostra il punto della corrispondenza.

Interruttore globale

Dopo aver cliccato l'icona dell'estensione nella toolbar di Chrome appare il widget popup con un grande interruttore verde/grigio „Plugin enabled". In modalità disabilitata nessun CSS/JS viene iniettato su nessuna pagina, indipendentemente dalle impostazioni delle cartelle. Il pulsante flottante è allora disabilitato (Halt Red, opacity 0.7). Lo stato sopravvive al riavvio di Chrome.

Inserisci URL dalla scheda

Un pulsante accanto al campo del pattern URL — inserisce protocol://host/* dalla scheda attiva. Creazione di una cartella in 2 secondi. L'indirizzo della pagina delle opzioni dell'estensione viene ignorato — viene presa la scheda esterna più recente.

Validazione URL in tempo reale

Inline, sul lato destro del campo URL, appare l'informazione "Corrisponde a X schede aperte" o un avviso. Cattura i refusi immediatamente.

Cronologia delle modifiche del set

Uno snapshot del CSS e del JS viene creato 3 secondi dopo l'ultima modifica (debounce). Limite di 5 versioni — la più vecchia viene espulsa. Al ripristino di una versione il contenuto corrente viene aggiunto alla cronologia come snapshot più recente, quindi puoi sempre annullare l'annullamento.

Tag e ricerca per tag

Nell'intestazione della scheda del set c'è un campo per i tag — inseriscili separati da virgole. Appaiono come piccole etichette nella sidebar accanto al nome del set. La ricerca trova anche per tag.

Etichetta e colore della cartella

Ogni cartella può avere una propria etichetta sul pulsante flottante (max 3 lettere, MAIUSCOLO) e un colore (color picker). L'etichetta e il colore aiutano a riconoscere visivamente quale progetto è attivo su una pagina.

Statistiche dei clic sulle azioni

Ogni pulsante azione conta quante volte è stato cliccato. Aiuta a vedere quali sono davvero usati.

Validazione CSS

Sotto l'editor CSS appare una barra con l'elenco dei problemi di sintassi:

È una semplice validazione sintattica — non verifica la correttezza di properties/values. Il CSS con un errore viene comunque iniettato (il browser ignorerà semplicemente le regole errate).

Preview del JS all'importazione

Nella modale di importazione di una singola cartella, dopo aver caricato il file, appare un elenco di set con una metrica:

Contenuto del file (3 set):
  Auto-login              CSS: 0L • JS: 4L                    JS
  Nascondi banner cookie  CSS: 8L • JS: 0L
  Debug GTM               CSS: 0L • JS: 12L • 2 azioni (8L)   JS

Un avviso con il numero di righe di JS, se ce ne sono. Il clic sul pulsante JS mostra il codice completo da controllare prima dell'importazione.

Isolamento try/catch del JS

Ogni set JS viene eseguito separatamente, con il proprio try/catch. Un errore in un set non blocca l'esecuzione degli altri. Gli errori vengono loggati nella console con il nome del set/azione e lo stack trace completo.

Storage quota

Un indicatore dell'uso della memoria nel menu Impostazioni della sidebar (es. 1.2 MB / 10 MB). Rosso sopra l'80%.

Filtro "Solo attive"

Un checkbox sopra l'elenco — nasconde i set contrassegnati come indipendenti (○) e mostra solo quelli attivi nella cartella (●). Aiuta a filtrare i set "manuali" quando la cartella ne ha molti. Reagisce immediatamente ai cambiamenti degli interruttori.

Aggiornamento dell'estensione

L'estensione ha una chiave fissa nel manifest (la build Firefox — un gecko.id fisso), il che significa che l'ID dell'estensione è immutabile tra gli aggiornamenti — i dati (cartelle, regole, impostazioni) vengono conservati. JustZix viene distribuito per quattro browser: Chrome, Edge, Opera e Firefox.

Notifica di nuova versione

Nel menu Impostazioni (accanto al numero di versione) compare un banner verde "È disponibile una nuova versione" quando il server pubblica un pacchetto più recente di quello installato. Il banner contiene un link di download. Il controllo è silenzioso — senza rete il banner semplicemente non viene mostrato.

Procedura di aggiornamento (Chrome / Edge / Opera)

  1. Scarica il nuovo ZIP con l'aggiornamento
  2. Estrai sovrascrivendo la stessa cartella in cui c'era la versione precedente
  3. In chrome://extensions/ (Edge: edge://extensions/) trova l'estensione e clicca l'icona di aggiornamento sul riquadro
  4. L'estensione si ricaricherà con i nuovi file, i dati restano

Firefox

La build Firefox si carica tramite about:debugging → "Questo Firefox" → "Carica componente aggiuntivo temporaneo" (puntando a manifest.json nella cartella justzix_firefox/). Un aggiornamento = ricaricare dopo aver sovrascritto i file.

Cosa può causare la perdita di dati: Esegui sempre un'esportazione prima di qualsiasi operazione sull'estensione. Se usi la sincronizzazione cloud — i dati sono anche nel cloud dell'account.

Esempi CSS

CSS Nascondere pubblicità e banner
/* Nascondi le pubblicità tipiche */
.ad, .ads, .advertisement,
.banner-ad, [class*="ad-banner"],
[id*="google_ads"] {
  display: none !important;
}

/* Nascondi il cookie banner */
.cookie-banner, #cookie-notice {
  display: none !important;
}
CSS Modalità scura per una pagina senza supporto dark mode
html {
  filter: invert(0.92) hue-rotate(180deg);
}
img, video, picture, iframe, [style*="background-image"] {
  filter: invert(1) hue-rotate(180deg);
}

Trucco: invertire l'intera pagina e re-invertire le immagini. Funziona sorprendentemente bene sulla maggior parte delle pagine.

CSS Evidenziazione degli elementi per i test / e2e
/* Colora tutti gli elementi con data-testid */
[data-testid] {
  outline: 2px dashed #f59e0b !important;
  outline-offset: -2px;
}
[data-testid]::before {
  content: attr(data-testid);
  position: absolute;
  background: #f59e0b;
  color: white;
  font-size: 10px;
  padding: 2px 4px;
  z-index: 9999;
}
CSS Pannello amministrativo più leggibile
/* Aumenta la leggibilità delle tabelle admin */
table.admin-list td, table.admin-list th {
  padding: 8px 12px !important;
  font-size: 14px !important;
}

/* Header sticky della tabella */
table.admin-list thead {
  position: sticky;
  top: 0;
  background: white;
  z-index: 10;
}

/* Righe alternate */
table.admin-list tbody tr:nth-child(odd) {
  background: #f9fafb;
}
CSS Contenitore di contenuto più largo
/* Spesso le pagine hanno un max-width rigido di 1200px - forza la larghezza */
.container, .main-content, main {
  max-width: 95% !important;
  width: 95% !important;
}
CSS Ambiente dev evidente (banner colorato)
body::before {
  content: "AMBIENTE DEV";
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: #dc2626;
  color: white;
  text-align: center;
  padding: 4px;
  font-weight: bold;
  z-index: 999999;
  font-family: 'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
}
body { padding-top: 28px !important; }

Ottimo per il pattern https://dev.example.com/* per non confondere gli ambienti.

Esempi JavaScript

JS Auto-compilazione dei campi di login (ambiente dev)
// Solo per dev! Non salvare mai password reali
window.addEventListener('load', () => {
  const login = document.querySelector('input[name="login"]');
  const pass = document.querySelector('input[name="password"]');
  if (login) login.value = 'admin@dev.local';
  if (pass) pass.value = 'devpass123';
});
JS Logging degli eventi analitici nella console
// Intercetta dataLayer.push (GTM)
const origPush = window.dataLayer?.push;
if (origPush) {
  window.dataLayer.push = function(...args) {
    console.log('%c[GTM]', 'color:#16a34a;font-weight:bold', args);
    return origPush.apply(window.dataLayer, args);
  };
}

// Intercetta gtag
const origGtag = window.gtag;
if (origGtag) {
  window.gtag = function(...args) {
    console.log('%c[GA4]', 'color:#2563eb;font-weight:bold', args);
    return origGtag.apply(window, args);
  };
}

Ideale per fare il debug della configurazione delle analitiche in produzione senza toccare il codice.

JS Auto-skip di intro / cookie / pubblicità
// Ogni 500ms per 10s controlla e clicca i pulsanti "Accetta"
let attempts = 0;
const interval = setInterval(() => {
  if (++attempts > 20) return clearInterval(interval);

  const buttons = [...document.querySelectorAll('button, a')];
  const target = buttons.find(b =>
    /akceptuj|zgoda|accept all/i.test(b.textContent || '')
  );
  if (target) {
    target.click();
    clearInterval(interval);
  }
}, 500);
JS Aggiunta di scorciatoie da tastiera
document.addEventListener('keydown', (e) => {
  // Ctrl+Shift+S - salva il modulo
  if (e.ctrlKey && e.shiftKey && e.key === 'S') {
    e.preventDefault();
    document.querySelector('button[type="submit"]')?.click();
  }
  // Ctrl+Shift+E - passa alla modifica (esempio non testato)
  if (e.ctrlKey && e.shiftKey && e.key === 'E') {
    e.preventDefault();
    document.querySelector('a.edit-link')?.click();
  }
});
JS Disabilitare alert / confirm / beforeunload
// Salta i fastidiosi confirm e beforeunload durante i test
window.confirm = () => true;
window.alert = (msg) => console.log('[alert soppresso]', msg);
window.onbeforeunload = null;
window.addEventListener('beforeunload', e => {
  e.stopImmediatePropagation();
}, true);
JS Spostare un elemento in un altro punto del DOM
// Ricorda - il CSS puro non lo fa quando il genitore ha display:none
window.addEventListener('load', () => {
  const target = document.querySelector('.important-info');
  const newParent = document.querySelector('.sidebar');
  if (target && newParent) {
    newParent.prepend(target);
  }
});
JS Visualizzazione di campi / elementi nascosti
// Mostra tutti gli input type="hidden" nascosti
document.querySelectorAll('input[type="hidden"]').forEach(input => {
  const wrapper = document.createElement('div');
  wrapper.style.cssText = 'background:#fef3c7;padding:4px;font-size:11px;font-family:monospace;border:1px dashed #f59e0b;';
  wrapper.innerHTML = `${input.name}: ${input.value}`;
  input.parentNode.insertBefore(wrapper, input);
});

Esempi di pulsanti azione

AZIONE CLR — svuota il modulo

Scorciatoia: CLR   Colore: rosso

document.querySelectorAll('input, textarea, select').forEach(el => {
  if (el.type === 'hidden') return;
  if (el.type === 'checkbox' || el.type === 'radio') {
    el.checked = false;
  } else {
    el.value = '';
  }
  el.dispatchEvent(new Event('change', { bubbles: true }));
});
AZIONE FILL — compila dati di test

Scorciatoia: FILL   Colore: verde

const data = {
  email: 'test@example.com',
  phone: '600000000',
  firstName: 'Mario',
  lastName: 'Test',
  street: 'Via Test 1',
  city: 'Roma',
  zip: '00100'
};
Object.keys(data).forEach(name => {
  const el = document.querySelector(`[name="${name}"]`);
  if (el) {
    el.value = data[name];
    el.dispatchEvent(new Event('input', { bubbles: true }));
    el.dispatchEvent(new Event('change', { bubbles: true }));
  }
});
AZIONE CART — aggiungi un prodotto di test al carrello

Scorciatoia: CART   Colore: arancione

// Per un negozio tipico — clicca il primo "aggiungi al carrello"
const btn = document.querySelector('.add-to-cart, [data-action="add-to-cart"]');
if (btn) btn.click();
else alert('Pulsante aggiungi al carrello non trovato');
AZIONE COPY — copia l'URL della pagina negli appunti

Scorciatoia: COPY   Colore: viola

navigator.clipboard.writeText(location.href).then(() => {
  console.log('Copiato:', location.href);
});
AZIONE TKN — mostra il token di autenticazione

Scorciatoia: TKN   Colore: giallo

// Estrae il token JWT da localStorage / cookies per il debugging
const token = localStorage.getItem('authToken')
  || document.cookie.match(/token=([^;]+)/)?.[1];
if (token) {
  navigator.clipboard.writeText(token);
  alert('Token copiato. Primi caratteri: ' + token.slice(0, 20) + '...');
} else {
  alert('Nessun token');
}
AZIONE SQL — mostra le query API nella console

Scorciatoia: SQL   Colore: blu

// Intercetta tutte le fetch e mostrale nella console
const origFetch = window.fetch;
window.fetch = async function(...args) {
  console.log('%c[FETCH]', 'color:#2563eb', args[0]);
  const res = await origFetch.apply(this, args);
  return res;
};
console.log('Logging delle fetch abilitato. Ogni chiamata apparirà nella console.');
AZIONE ENV — mostra info sull'ambiente

Scorciatoia: ENV   Colore: grigio

const info = {
  url: location.href,
  userAgent: navigator.userAgent.split(' ').pop(),
  cookies: document.cookie.split(';').length,
  localStorage: Object.keys(localStorage).length,
  framework: window.React ? 'React' : window.Vue ? 'Vue' : window.jQuery ? 'jQuery' : 'unknown'
};
alert(JSON.stringify(info, null, 2));

Scenari d'uso

1. Lavoro con più clienti / progetti

Ogni progetto ha una propria cartella con un proprio pattern URL. Puoi avere cartelle:

Nel pannello laterale le cartelle private si possono abilitare/disabilitare rapidamente. L'esportazione di una singola cartella consente di condividere la configurazione con il team.

2. Ambiente di sviluppo con un'indicazione visiva

Su ogni dev/staging aggiungi un banner e l'auto-login. Un set CSS (banner) e un set JS (auto-fill). Crei una cartella separata per ogni ambiente, si combinano con un semplice checkbox.

3. Strumenti per product manager / QA

Un pannello di azioni con pulsanti: FILL (dati di test), CART (acquisto di test), CLR (svuota il modulo), STATE (mostra lo stato dell'applicazione in un alert). Senza programmatore, senza console, con un clic.

4. Modifiche di pagine pubbliche

I blog/le documentazioni preferiti con migliore leggibilità — contenitore più largo, font, modalità scura. Ogni pagina in una cartella separata, "Attivo" lasciato sempre abilitato.

5. Debugging delle analitiche / GTM

Un set per ogni dominio con JS che intercetta dataLayer.push e gtag. Lo abiliti quando un cliente segnala un problema con le analitiche, senza toccare il codice della pagina.

6. Lavoro su pannelli amministrativi

Il pattern *://*.justzix.com/admin/* e CSS che migliora tabelle, elenchi, moduli. Più un'azione "Filtro di test" che imposta automaticamente i filtri per un workflow tipico.

7. Test sicuri in produzione

L'azione RO (read-only) inietta CSS che nasconde tutti i pulsanti "Elimina", "Salva", "Invia" — una temporanea "modalità di sola lettura" per non sbagliare.

// Nascondi i pulsanti pericolosi
document.querySelectorAll(
  'button[type="submit"], .delete-btn, .danger-btn, [class*="delete"]'
).forEach(b => b.style.display = 'none');
console.warn('MODALITÀ READ-ONLY abilitata');

Problemi frequenti e soluzioni

Il JavaScript non è stato eseguito

Il CSS non funziona

Il pulsante flottante non appare

Dopo l'aggiornamento dell'estensione ho perso i dati

L'estensione ha una chiave fissa nel manifest — gli aggiornamenti successivi conservano i dati. Se nonostante ciò i dati sono spariti:

Le posizioni dei pulsanti/pannelli si resettano

È normale — le posizioni sono per finestra del browser e conservate nella memoria di sessione (chrome.storage.session). Dopo la chiusura della finestra le posizioni scompaiono, in una nuova finestra parti da quelle predefinite. La posizione sopravvive alla navigazione tra schede nella stessa finestra.

L'esportazione parziale ha omesso alcune impostazioni globali

Sì — l'esportazione parziale contiene solo le cartelle e i set selezionati più le relative impostazioni di visibilità. Non contiene le posizioni dei pannelli flottanti (sono per finestra) né altre preferenze globali. Per un backup completo usa la modalità "Tutto".

L'importazione parziale mi ha sovrascritto una cartella che prima non esisteva

La modalità "Unisci" abbina le cartelle per ID. Se il file importato aveva un ID in conflitto con una cartella esistente (es. lo stesso file era già stato importato una volta), appare un prompt: 1 sovrascrivi / 2 copia (predefinita, sicura) / Annulla. Scegliendo 2 ottieni copie con nuovi ID e l'aggiunta di "(import)" nel nome della cartella — non perdi nulla.

L'albero delle cartelle non si espande

La freccia di espansione appare solo se la cartella ha dei set. Una cartella vuota ha un puntino grigio invece della freccia. Lo stato di espansione di ogni cartella viene memorizzato in chrome.storage.local.

Non vedo il pulsante Esporta/Importa della cartella

Questi pulsanti sono nella barra della cartella (in cima all'area di modifica), accanto al pulsante "Elimina cartella". Da non confondere con i pulsanti nel menu Impostazioni, che riguardano l'insieme di tutte le impostazioni.

L'AI Helper non risponde

Conflitto con la Content Security Policy

Il JS di regole e azioni viene eseguito nel contesto della pagina con una strategia a livelli resistente alle regole rigide della Content Security Policy. La maggior parte delle pagine — inclusi grandi servizi come Facebook — funziona subito, senza configurazione.

Le pagine con una CSP molto rigida (alcune banche, siti aziendali) possono bloccare l'esecuzione. Affinché il JS funzioni su ogni pagina, abilita per JustZix l'opzione «Consenti script utente»: apri chrome://extensions, vai ai dettagli di JustZix e attiva l'interruttore (i browser più vecchi richiedono anche la modalità sviluppatore). Quando una pagina blocca l'esecuzione, la finestra JavaScript / la Console JS mostra un messaggio adeguato.


JustZix — manuale