Bloccare l'esecuzione di un file JavaScript

Con l’entrata in vigore del GDPR, le normative europee richiedono di ottenere un consenso esplicito da parte dell’utente prima di eseguire qualsiasi script che raccolga dati personali. In pratica, finché il visitatore non accetta i termini, è obbligatorio bloccare l’esecuzione di tutti gli script potenzialmente invasivi. Rispettare questa regola non solo protegge il sito da sanzioni, ma contribuisce anche a instaurare un rapporto di fiducia con gli utenti, dimostrando trasparenza e rispetto dei loro diritti.
Nel contesto di un sito basato su Drupal, la gestione del consenso può apparire complessa a causa dell’ampia varietà di moduli e librerie integrate. Fortunatamente, esiste una soluzione semplice e universale, applicabile a qualsiasi piattaforma, che si basa sulla manipolazione dell’attributo type dei tag <script>. Nel prosieguo dell’articolo vedremo nel dettaglio come implementare questa tecnica, come riattivare gli script al momento del consenso e quali sono le implicazioni per i principali browser.
Strategia di blocco degli script in Drupal
Per impedire l’esecuzione di script non autorizzati, il metodo più efficace è modificare l’attributo type dei tag <script> presenti nella pagina. Se l’attributo è già definito, lo sovrascriviamo con un valore che il browser non riconosce come JavaScript; se invece è assente, lo aggiungiamo esplicitamente. In questo modo il browser ignora il contenuto dello script finché non viene ripristinato un tipo valido.
Questa strategia offre diversi vantaggi. Innanzitutto, non richiede la rimozione fisica del codice né interventi su ciascun modulo di Drupal, riducendo notevolmente i tempi di sviluppo e manutenzione. Basta applicare una regola globale, ad esempio tramite una piccola libreria JavaScript o un hook personalizzato, che individua tutti gli script e imposta l’attributo type su un valore sicuro, come application/json. Questo valore è riconosciuto come MIME type valido, ma non viene eseguito dal browser.
Inoltre, l’approccio è estremamente flessibile. È possibile aggiungere una logica di controllo del consenso che, una volta confermato dall’utente, ripristini il valore originale dell’attributo type. Così gli script vengono attivati solo in presenza di un consenso esplicito, garantendo la conformità al GDPR senza sacrificare le funzionalità del sito. La soluzione è quindi scalabile e adattabile a qualsiasi esigenza di privacy.
Modifica dell’attributo type per bloccare l’esecuzione
L’attributo type indica al browser il formato del contenuto dello script. Quando il valore è omesso o corrisponde a un MIME type JavaScript (ad esempio text/javascript), il browser esegue il codice. Le specifiche HTML5 suggeriscono di omettere l’attributo per evitare ridondanze, ma nei browser più vecchi era necessario specificare il linguaggio di scripting.
Se impostiamo type="module", il browser tratta lo script come un modulo JavaScript, differendo la sua elaborazione e richiedendo l’uso di CORS per le richieste cross‑origin. Per il blocco temporaneo, invece, desideriamo un valore che non venga riconosciuto come script eseguibile. Qualsiasi valore diverso, come application/json, farà sì che il contenuto venga considerato un semplice blocco di dati, ignorando anche l’attributo src.
In pratica, lo script di blocco può essere scritto in questo modo:
document.querySelectorAll('script').forEach(function (s) {
if (!s.hasAttribute('type') || s.getAttribute('type').includes('javascript')) {
s.setAttribute('type', 'application/json');
}
});Questo snippet scansiona tutti i tag <script> presenti nella pagina e assegna loro il MIME type application/json, impedendo l’esecuzione fino al successivo ripristino. La soluzione è leggera, non richiede dipendenze esterne e può essere inserita nel file libraries.yml di Drupal o in un file JavaScript personalizzato.
Ripristino e riattivazione degli script quando l’utente fornisce il consenso
Una volta ottenuto il consenso dell’utente, è necessario riportare gli script al loro stato originale per consentirne l’esecuzione. Il primo passo consiste nel selezionare lo script target all’interno del DOM e cambiare nuovamente l’attributo type in text/javascript (o nel valore originale). Tuttavia, modificare solo il tipo non è sufficiente: se il browser ha già elaborato il DOM, lo script rimane inattivo.
Per forzare il ricaricamento completo, possiamo temporaneamente rimuovere l’attributo src e poi reinserirlo aggiungendo un parametro di cache‑busting basato sul timestamp corrente. Questo trucco induce il browser a considerare lo script come nuovo e a eseguirlo nuovamente. Ecco un esempio pratico:
let script = document.querySelector('script[src="script.js"]');
script.setAttribute('type', 'text/javascript');
let oldSrc = script.getAttribute('src');
script.removeAttribute('src');
setTimeout(function () {
script.setAttribute('src', oldSrc + '?t=' + Date.now());
}, 250);Il blocco di codice sopra compie tre operazioni fondamentali: ripristina il tipo corretto, rimuove e reinserisce l’attributo src con un parametro unico, e attende 250 ms per garantire che il DOM abbia completato il rendering. In questo modo lo script viene eseguito come se fosse stato caricato per la prima volta, ma solo dopo che l’utente ha fornito il consenso. È possibile estendere la logica per gestire più script simultaneamente, iterando su tutti gli elementi con type="application/json".
Considerazioni finali e compatibilità dei browser
Il metodo descritto è stato testato principalmente su Chrome e Firefox, dove ha dimostrato un funzionamento affidabile. È comunque importante verificare la compatibilità con altri browser, come Edge, Safari e i browser mobili, poiché le implementazioni del rendering del DOM possono variare leggermente. In generale, la manipolazione dell’attributo type e il ricaricamento tramite cache‑busting sono supportati da tutti i principali motori di rendering.
Per chi utilizza piattaforme diverse da Drupal, la soluzione rimane valida: basta adattare il selettore degli script al contesto specifico e inserire il codice di blocco nella fase di pre‑caricamento della pagina. L’obiettivo è sempre lo stesso—garantire che gli script vengano eseguiti solo dopo che l’utente ha espresso il proprio consenso, in linea con le disposizioni del GDPR. Una corretta implementazione contribuisce a mantenere un equilibrio tra privacy e funzionalità nei progetti web moderni.
Invitiamo i lettori a condividere le proprie esperienze nei commenti, segnalando eventuali comportamenti particolari riscontrati su altri browser o su configurazioni specifiche. Il miglioramento continuo di queste pratiche è fondamentale per garantire che le soluzioni di gestione del consenso rimangano efficaci e aggiornate nel tempo.