Vanaf iframe inhoud naar functie in top pagina
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<script>
function stuur()
{
//window.top.document.sluit();
var elem = top.document.getElementById('formdiv');
elem.style.display = 'none';
}
function hide()
{
window.setTimeout("stuur()",5000);
}
</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)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<script>
function sluit()
{
document.getElementById('formdiv').style.display = "none";
}
</script>
</head>
<body>
</script>
</head>
<body
<div id="formdiv">
<iframe id="formframe" width="455" height="650" src="http://www.mijndomein.nl">
</iframe>
</div>
</body>
</html>
<head>
<script>
function sluit()
{
document.getElementById('formdiv').style.display = "none";
}
</script>
</head>
<body>
</script>
</head>
<body
<div id="formdiv">
<iframe id="formframe" width="455" height="650" src="http://www.mijndomein.nl">
</iframe>
</div>
</body>
</html>
Toevoeging op 17/07/2017 22:56:52:
Uncaught DOMException:
is daar omheen te bouwen?
Want is hetzelfde domein, dezelfde map.
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.
Vervolgens kan je dit met javascript weer toevoegen aan de div na 5 secondes:
Code (php)
1
2
3
2
3
window.setTimeout(function(){
document.getElementById('formdiv').className += ' formstyle';
}, 5000);
document.getElementById('formdiv').className += ' formstyle';
}, 5000);
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.
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..
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:
window.opener.document.getElementById('formdiv').style.display = 'hidden';
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.
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.
http://www.3till7.net/2014/08/09/triggering-events-in-an-iframe/index.html
Gewijzigd op 19/07/2017 11:05:52 door Hans De Ridder
>>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.
Gewijzigd op 19/07/2017 11:41:14 door Ben van Velzen
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.