Een iframe heeft normaal een vaste hoogte: te kort en je krijgt een interne scrollbar, te lang en je hebt witruimte onder de vragenlijst. De embed-snippet van Mach3Forms gebruikt postMessage om de hoogte automatisch mee te laten schalen met de inhoud - geen scrollbar, geen overschot.
Hoe werkt het?
De vragenlijst (binnen de iframe) meet zijn eigen hoogte en stuurt deze als bericht naar de pagina waar de iframe op staat. Het script in de embed-snippet luistert naar dat bericht en past de height van de iframe aan.
Schematisch:
[Vragenlijst in iframe] [Pagina van jouw website]
| |
| -- postMessage({event: 'height', |
| height: 920, |
| token: 'xyz'}) -->|
| | --> iframe.height = 920 + 'px'
De vragenlijst stuurt dit bericht steeds opnieuw als zijn hoogte verandert (bijvoorbeeld als de deelnemer naar een volgende groep gaat met meer of minder vragen).
Het script ontleed
Uit de embed-snippet:
window.addEventListener('message', function (event) {
if (event.origin !== 'https://app.mach3forms.com' || event.data.token == 'XXXXXX')
return;
if (event.data.event === 'height') {
var iframe = document.getElementById('iframe-XXXXXX');
iframe.height = event.data.height + 'px';
}
});
Wat het script doet:
- Luistert naar alle
message-events op de pagina. - Negeert berichten die niet van Mach3Forms (
event.origin) komen - een belangrijke veiligheidscheck. - Negeert berichten waarvan de token niet matcht - voorkomt dat een bericht van een andere iframe per ongeluk effect heeft.
- Bij een
height-bericht: past de hoogte van de juiste iframe aan.
Wanneer werkt het niet?
| Situatie | Waarom |
|---|---|
Je hebt het <script>-blok weggelaten |
Geen luisteraar = geen height-update; iframe blijft op de standaard hoogte |
De iframe staat in een display: none container |
De vragenlijst meet zijn eigen hoogte als 0; toon de container voor of tijdens het laden |
Je gebruikt een Content Security Policy (CSP) zonder frame-src |
Browser blokkeert de iframe; voeg het Mach3Forms-domein toe aan je CSP-frame-src |
| Browser blokkeert third-party cookies/scripts strict | postMessage zelf werkt, maar de vragenlijst kan andere problemen geven |
Voor gevorderden: meerdere iframes op één pagina
Het script werkt per iframe op basis van token. Heb je twee verschillende vragenlijsten op één pagina? Dan plaats je twee complete snippets - beide hebben hun eigen unieke token, en de scripts bijten elkaar niet.
<!-- Vragenlijst A -->
<iframe id="iframe-AAAA" src="..." ...></iframe>
<script>...</script>
<!-- Vragenlijst B -->
<iframe id="iframe-BBBB" src="..." ...></iframe>
<script>...</script>
Veelgestelde vragen
Dit is de fallback-hoogte voor het geval de auto-resize niet werkt. Loop na: heb je het <script>-blok ook geplaatst, draait je site op HTTPS, en blokkeert geen CSP de iframe?
Vervang height="600px" door je gewenste hoogte en verwijder het <script>-blok. Dan krijgt de iframe een interne scrollbar als de inhoud groter is.
Dat is normaal - bij elke wisseling stuurt de vragenlijst een nieuwe height. De iframe past zich aan, wat soms een korte sprong oplevert. Voor een vloeiendere ervaring kun je in je eigen CSS een transition: height 0.2s ease; op de iframe zetten.
Dat is het normale geval - embed werkt cross-domain. De event.origin-check in het script verwijst naar het Mach3Forms-domein van de iframe, niet naar je eigen site.