PrestaShop Administratie & productiviteit

DataFirefly Fix Dropzone CORS: Correctie voor Tainted Canvas bij Multishop in PrestaShop 8

De definitieve correctie voor de tainted canvas-fout in de producteditor bij multishop met meerdere domeinen.

Draait u PrestaShop 8 in multishop met meerdere verschillende domeinen (winkel-nl.com, winkel-en.com en zo verder), dan hebt u deze fout waarschijnlijk al in de browserconsole gezien tijdens het bewerken van een productpagina: SecurityError: tainted canvas. Het afbeeldingsformulier breekt, de Dropzone-voorvertoning verschijnt niet meer, en u komt vast te zitten. Het is een bekende fout in PrestaShop: de afbeeldingen worden vanaf een ander domein geserveerd, het canvas wordt cross-origin, en getImageData klapt eruit. DataFirefly Fix Dropzone CORS lost dat op met een monkey patch op Dropzone aan clientzijde: de URL's van de bestaande afbeeldingen worden vóór het laden herschreven naar het domein van de backoffice, waardoor het canvas schoon blijft en de editor gewoon werkt. Installeren, aanzetten, en de fout is weg. Geen configuratie, geen tabel, 70 regels JavaScript.

PrestaShop 8.0+ Multishop met meerdere domeinen Native fix Geen configuratie 1 JS-bestand Zonder database
  • 30 dagen geld terug
  • 12 maanden updates
  • Support binnen 24 uur
www.datafirefly.com/nl/
Correctif du bug tainted canvas Dropzone CORS en multiboutique PrestaShop 8
v1.0.0 · bijgewerkt 2026-05-01
Wat het doet

De korte versie.

01

Lost de tainted canvas-fout in multishop op

Staat uw backoffice open op winkel-nl.com terwijl u een product bewerkt dat aan winkel-en.com hangt, dan komen de afbeeldingen van winkel-en.com, dus cross-origin, dus een besmet canvas en een SecurityError. De fix herschrijft de URL's van de afbeeldingen naar het huidige domein van de backoffice voordat Dropzone ze laadt.

02

Een nette en minimale monkey patch

De module herschrijft Dropzone.prototype.displayExistingFile één keer bij het initialiseren, om cross-origin URL's te onderscheppen. Geen polling, geen blijvende listener en geen extra belasting: de patch is onzichtbaar zodra hij er staat en heeft geen meetbare invloed op de snelheid van de backoffice.

03

Geen voetafdruk, geen configuratie

Het JS-bestand van de module wordt alleen geladen op de productcontrollers AdminProducts (legacy) en admin_products_v2 (Symfony). De rest van de backoffice blijft ongemoeid. Er is geen database en er valt niets in te stellen.

04

Geen geknutsel aan de core

Geen enkele wijziging aan de core van PrestaShop, aan de miniaturen of aan het afbeeldingssysteem. De fix werkt uitsluitend aan browserzijde op Dropzone. Lost PrestaShop de fout later zelf op, dan heeft de module geen nadelig effect (de patch is idempotent).

De lange versie

Alles wat u wilt weten voordat u installeert.

Een gedetailleerde blik op hoe DataFirefly Fix Dropzone CORS: Correctie voor Tainted Canvas bij Multishop in PrestaShop 8 werkt, waarom we het zo gebouwd hebben en de gedachte achter de bovenstaande functies.

§ 01

De fout, in gewone taal

U draait PrestaShop 8 in multishop met meerdere verschillende domeinen, bijvoorbeeld winkel-nl.com voor Nederland en winkel-en.com voor het Verenigd Koninkrijk, elk met een eigen HTTPS-certificaat. U opent de backoffice via winkel-nl.com en klikt op een product dat aan de Engelse winkel hangt. De afbeeldingen van dat product worden vanaf winkel-en.com geserveerd, want dat is het canonieke domein van die winkel. Voor de browser is dat een cross-origin bron, en omdat de native PrestaShop-afbeeldingen niet de juiste CORS-headers meesturen (Access-Control-Allow-Origin), raakt het canvas dat de Dropzone-voorvertoning moet opbouwen besmet. Bij de eerstvolgende aanroep van ctx.getImageData gooit de browser een SecurityError, de Dropzone-editor loopt vast, en de afbeeldingszone van het productformulier wordt onbruikbaar. De foutmelding in de console: main.bundle.js:274 Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.

§ 02

Waarom deze fout er werkelijk toe doet

Veel winkels met meerdere domeinen leven al lang met deze fout door het bewerken over domeinen heen te vermijden, dus door zich voor elk product altijd op het juiste domein aan te melden. Maar in een echte teamorganisatie, met een catalogus die door één persoon wordt beheerd en meerdere internationale subwinkels, is dat niet vol te houden. PrestaShop heeft in sommige versies van de nieuwe Symfony-editor een officiële correctie op Dropzone.vue, maar de fout blijft bestaan in de oude AdminProducts-editor en wordt niet altijd naar de stabiele versies teruggezet. Onze module lost het probleem in beide editors tegelijk op.

§ 03

Hoe de fix technisch werkt

Bij het laden van een productpagina in de backoffice voegt de module via de hook displayBackOfficeHeader een JS-bestand van 70 regels toe aan de header. Het script wacht tot window.Dropzone bestaat en vervangt daarna Dropzone.prototype.displayExistingFile door een onderschepte versie. Die versie bekijkt de ontvangen URL: is die cross-origin, dan wordt de URL met new URL(url) uit elkaar gehaald, worden u.protocol en u.host op die van window.location.origin gezet, wordt de URL weer samengesteld en aan de oorspronkelijke methode doorgegeven. Aan browserzijde krijgt Dropzone dus een URL van dezelfde oorsprong, blijft het canvas schoon, werkt getImageData gewoon, en verschijnt de bestaande afbeelding netjes in het sleepgebied. De patch is idempotent (een vlag __dfCorsPatched voorkomt dubbele toepassing) en veilig bij fouten (ongeldige URL's vallen terug op het oorspronkelijke gedrag).

§ 04

Waarom geen ingreep in de core of een override

Een PrestaShop-override op de productcontroller zou kwetsbaar zijn: die breekt bij elke grote update, en de Dropzone-code zit sowieso niet in de PHP-controller. Het JS-bestand van Dropzone rechtstreeks aanpassen zou bij elke update worden overschreven. Een monkey patch aan clientzijde is daarentegen volledig niet-invasief: er wordt geen enkel PrestaShop-bestand gewijzigd, er komt geen override in de core, en de patch wordt tijdens de uitvoering van buitenaf toegepast. Werkt PrestaShop Dropzone of de koppeling daarmee bij, dan blijft de patch werken zolang de signatuur van displayExistingFile niet verandert (en die is sinds Dropzone 5.x bijzonder stabiel). Verandert die methode toch, of lost PrestaShop het zelf op, dan verwijdert u de module zonder dat er iets achterblijft.

§ 05

Gebruikssituaties

Een winkel voor meerdere landen met een eigen domein per markt (winkel-nl.com, winkel-en.com, winkel-es.com), beheerd door één centraal team: de fout blokkeert het bewerken van producten over domeinen heen, en de module lost dat meteen op. Een marktplaats of een netwerk van merken in multishop met meerdere domeinen: dezelfde opzet, dezelfde oplossing. Een bureau dat meerdere klantwinkels op aparte domeinen beheert: de module maakt de backoffice gewoon bruikbaar zonder telkens van domein te wisselen. En bij een overstap van één winkel naar meerdere domeinen: preventief geïnstalleerd voorkomt de module de onaangename verrassing na de migratie.