PrestaShop Amministrazione e Produttività

DataFirefly Fix Dropzone CORS — Correttivo tainted canvas multinegozio PrestaShop 8

Il correttivo definitivo per il bug «tainted canvas» sull'editor prodotto in multinegozio multi-domini.

Se sei su PrestaShop 8 in multinegozio con più domini diversi (negozio-it.com, negozio-en.com, ecc.), probabilmente hai già visto questo errore nella console del browser modificando una scheda prodotto: SecurityError: tainted canvas. Il form immagini si rompe, l'anteprima Dropzone non si visualizza più, e sei bloccato. È un bug noto di PrestaShop: le immagini vengono servite da un altro dominio, il canvas diventa cross-origin, e getImageData esplode. DataFirefly Fix Dropzone CORS risolve il problema con monkey-patch di Dropzone lato client: gli URL delle immagini esistenti vengono riscritti verso il dominio del back-office prima del caricamento, il canvas resta pulito, l'editor funziona. Install → attivato → niente più bug. Nessuna configurazione, nessuna tabella, 70 righe di JS.

PrestaShop 8.0+ Multinegozio multi-domini Fix nativo Zero config 1 file JS Senza DB
  • Rimborso 30 giorni
  • 12 mesi di aggiornamenti
  • Supporto 24h
www.datafirefly.com/it/
DataFirefly Fix Dropzone CORS — Correctif tainted canvas multishop PrestaShop 8
v1.0.0 · aggiornato 2026-05-01
Cosa fa

L' versione breve.

01

Risolve il bug tainted canvas multinegozio

Se il tuo back-office è aperto su negozio-it.com e modifichi un prodotto assegnato a negozio-en.com, le immagini vengono da negozio-en.com → cross-origin → canvas tainted → SecurityError. Il fix riscrive gli URL delle immagini verso il dominio attuale del BO prima che Dropzone le carichi.

02

Monkey patch elegante e minimalista

Il modulo riscrive Dropzone.prototype.displayExistingFile una sola volta all'init per intercettare gli URL cross-origin. Niente polling, niente listener permanente, nessun sovraccarico — il patch è invisibile una volta in atto e non ha alcun impatto misurabile sulle performance del BO.

03

Zero footprint, zero config

Il file JS del modulo viene caricato solo sui controller prodotto AdminProducts (legacy) e admin_products_v2 (Symfony). Il resto del back-office non viene toccato. Nessun database, nessun parametro da regolare.

04

Niente bricolage del nucleo

Nessuna modifica al core di PrestaShop, ai thumbnail, al sistema di immagini. Il fix agisce solo lato browser su Dropzone. Se PrestaShop corregge nativamente il bug in un futuro aggiornamento, il modulo resta senza effetto negativo (patch idempotente).

La versione lunga

Tutto quello che vorresti sapere prima di installare.

Uno sguardo dettagliato su come funziona DataFirefly Fix Dropzone CORS — Correttivo tainted canvas multinegozio PrestaShop 8, perché l'abbiamo progettato così, e il ragionamento dietro le funzionalità qui sopra.

§ 01

Il bug, in chiaro

Sei su PrestaShop 8 in multinegozio, con più domini diversi — per esempio negozio-it.com per l'Italia e negozio-en.com per l'Inghilterra, ciascuno con il proprio certificato HTTPS. Apri il back-office da negozio-it.com e clicchi su un prodotto associato al negozio inglese. Le immagini di questo prodotto vengono servite da negozio-en.com, perché è il dominio canonico di quel negozio. Per il browser, è una risorsa cross-origin — e poiché le immagini PrestaShop native non inviano i giusti header CORS (Access-Control-Allow-Origin), il canvas che deve generare l'anteprima Dropzone si trova «tainted». Alla prossima chiamata a ctx.getImageData, il browser lancia un SecurityError, l'editor Dropzone crasha, e il form prodotto diventa inutilizzabile per la zona immagini. Errore console: main.bundle.js:274 Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data. at main.bundle.js:274:137430 at L (main.bundle.js:274:137535) at main.bundle.js:274:123939 at o (main.bundle.js:274:123147) at l.onload (main.bundle.js:274:123297)

§ 02

Perché questo bug è reale e importante

Molti negozi multi-domini convivono con questo bug da tempo evitando di editare in cross-domain (collegandosi sempre al «giusto» dominio per ogni prodotto). Ma in una vera organizzazione di team — catalogo gestito da una sola persona, più sotto-negozi internazionali — è insostenibile. PrestaShop ha un correttivo ufficiale su Dropzone.vue in alcune versioni del nuovo editor Symfony, ma il bug persiste sul vecchio editor AdminProducts e non viene sempre retroportato sulle versioni stabili. Il nostro modulo risolve il problema su entrambi gli editor contemporaneamente.

§ 03

Come funziona il fix tecnicamente

Al caricamento di una pagina prodotto del back-office, il modulo inietta un file JS di 70 righe nell'header tramite l'hook displayBackOfficeHeader. Lo script attende che window.Dropzone sia definito, poi sostituisce Dropzone.prototype.displayExistingFile con una versione intercettata. Questa versione esamina l'URL ricevuto: se è cross-origin, lo parsa con new URL(url), forza u.protocol e u.host a quelli di window.location.origin, ricompone l'URL e lo passa al metodo originale. Risultato lato browser: Dropzone riceve un URL same-origin, il canvas resta «clean», getImageData funziona, il file immagine esistente si visualizza normalmente nel drag & drop. Il patch è idempotente (un flag __dfCorsPatched impedisce la doppia applicazione) e fail-safe (gli URL non validi tornano al comportamento originale).

§ 04

Perché non un patch core o un override

Un override di PrestaShop sul controller prodotto sarebbe fragile: si romperebbe ad ogni aggiornamento maggiore, e il codice Dropzone non è nel controller PHP. Una modifica diretta del file JS di Dropzone verrebbe sovrascritta ad ogni aggiornamento. Il monkey-patch lato client, invece, è totalmente non invasivo: nessun file PrestaShop viene modificato, nessun core override viene posato, il patch si applica al runtime dall'esterno. Se PrestaShop aggiorna Dropzone o la sua integrazione, il patch resta funzionale finché la firma di displayExistingFile non cambia (cosa estremamente stabile da Dropzone 5.x). Se il metodo cambia o se PrestaShop corregge nativamente, puoi disinstallare il modulo senza alcuna traccia residua.

§ 05

Casi d'uso

Negozio multi-paese con un dominio per mercato (negozio-it.com / negozio-en.com / negozio-es.com) gestito da un team centralizzato — il bug blocca la modifica prodotto in cross-domain, il modulo lo risolve immediatamente. Marketplace o rete di brand in modalità multinegozio multi-domini — stessa configurazione, stessa soluzione. Team di agenzia che gestisce più sotto-negozi clienti su domini distinti — il modulo rende il back-office utilizzabile normalmente senza dover saltellare tra domini. Migrazione da mono-negozio a multi-domini — installato preventivamente, il modulo evita la brutta sorpresa post-migrazione.