Ik gebruik een form in een iframe.
De bedank pagina komt daar ook terecht.
Nu wil ik dat die pagina de DIV onzichtbaar maakt (display = 'none'),
die om de iframe staat (na 5 seconden).
Het zou ook direct mogen vanaf de iframe pagina.
Dan is de overzichtspagina weer beschikbaar.
Alles staat in dezelfde map bij hetzelfde domein.
Heb echt van alles geprobeerd met parent, met top, enz.
Dit in de bedank pagina:
<script>
function stuur()
{
//window.top.document.sluit();
var elem = top.document.getElementById('formdiv');
elem.style.display = 'none';
}
function hide()
{
window.setTimeout("stuur()",5000);
}
</script>
Ik gebruik de volgende html:
Pagina :testform.html (met de iframe)
Als ik je goed begrijp wil je dat formdiv verdwijnt na 5 secondes? Je kan bijvoorbeeld in CSS een nieuwe class aanmaken en dit op display: none zetten.
.formstyle {
display: none;
}
Vervolgens kan je dit met javascript weer toevoegen aan de div na 5 secondes:
Ik heb een fiddle voor je aangemaakt zodat je kan zien hoe het werkt: https://jsfiddle.net/9uov1na3/.
Je hebt tevens teveel sluitende tags in je html document staan dat heb ik ook opgeschoond.
Dank voor je reactie.
Ik was uiteindelijk ook al op deze oplossing gekomen.
Ik had gekeken wanneer de iframe volledig geladen is.
En dan na 5 seconden de div sluiten.
Maar het ligt iets ingewikkelder helaas.
In het iframe wordt een form geplaatst.
Als die gesubmit wordt verschijnt een bedankmelding.
En die moet na 5 seconden de div laten verdwijnen.
Of een functie starten.
Maar ik heb nog niet kunnen ontdekken hoe je te weten komt
welke pagina geladen is. Of dat je het herladen kunt vangen.
Want de src blijft de oorspronkelijke ifame pagina tonen.
Dus zou je eigenlijk moeten denken aan een functie vanuit de ingeladen bedankpagina.
Die dan een functie aanstuurt in de toppagina.
En daar komen de uitzonderingsregels van de browsers..
Een iframe is een min of meer geïsoleerd element, en 'denkt' dus dat het het top-element is. Het is dan ook niet mogelijk om iets te doen met de properties van de bovenliggende pagina.
Nou ja, helemaal onmogelijk is het niet, door een security-bugje. In javascript kun je het object opvragen van de aanroepende pagina: window.opener. Het gevaar daarvan is dat je met window.opener.location de aanroepende pagina kunt redirecten (naar een phishing-website bijvoorbeeld; daarom moet je nooit zomaar een willekeurige pagina in een iframe inladen). Maar wellicht zou iets als dit ook kunnen werken:
Geen garantie voor succes overigens, want het zou best kunnen dat je browser dergelijke properties read-only maakt. En je ziet steeds vaker dat webservers een Referrer-Policy header toevoegen, waardoor het opener-object undefined blijft.
Het is wel mogelijk om vanaf de top-pagina een iframe element te triggeren.
Andersom zou zoiets dan toch ook mogelijk zijn.
Wanneer je een verandering van de inhoud van het iframe kunt detecteren is dat in principe ook een mogelijkheid.
Onderstaand script triggert een element in een iframe.
>> Het is wel mogelijk om vanaf de top-pagina een iframe element te triggeren.
>>Andersom zou zoiets dan toch ook mogelijk zijn.
Het een is geen logisch gevolg van het andere, gezien het aanroepen van scripts in een iframe geen beveiligingsrisico is, maar vanuit het iframe naar buiten wel.
Ik zou zelf ook geen gebruik maken van iframes, het levert geen enkele meerwaarde. Wanneer je zaken wilt doen zonder de omringende pagina te refreshen kun je beter kijken naar een javascript oplossing (AJAX). Als het puur om een layouttechnische zaak gaat los je het met CSS op.
Je kunt de div die om het iframe zit relative positioneren en het iframe absolute. Vervolgens kun je in dezelfde div een bedank bericht plaatsen en ook absolute gepositioneerd maken. Vervolgens kun je met z-index bepalen welke div boven en welke onder komt (form of bedankbericht). Vervolgens kun je met javascript de z-index aanpassen als er op de verstuur knop geklikt is.
Wat mooier is is om met PHP een bestand te maken waar het form inzit en die te includen in je pagina. Dan kun je in dat bestand ook een bedankbericht kwijt.