[javascript] controleren of iframe bestaat

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Missie:
Ik wil vanuit een popup een pagina laden waar zich 3 iframes in bevinden en in 1 van die iframes wil ik weer een specifieke pagina laden. Probleem hierbij is dat de javascript te snel wordt uitgevoerd, daardoor probeert ie een pagina in een nog niet bestaand iframe te laden wat er voor zorgt dat ie in plaats daarvan in een nieuwe window wordt geopend. Nu dacht ik dit op te lossen door:

JavaScript:
1
2
3
4
5
6
7
window.open('index.php','body');
// pseudo code
while(!box)
{
  // do nothing
}
window.open('mail.php?map=1','box');


maw: open de index pagina. blijf loopen zolang er geen window (iframe) met de naam box is en zodra die er wel is, open dan mail.php in die window/iframe.

Probleem:
Ik weet zowiezo al niet zo goed hoe ik zo'n while in javascript moet construeren, maar ik loop nu al eerder vast. Om te testen wilde ik eerst dmv een alert ff kijken of het wel lukte om op het bestaan van die iframe te checken. Maar dat lukt dus niet. Ik vond o.a. dit stukje van crisp in een ander topic:
JavaScript:
1
2
3
4
5
try {
  if (newwindow) alert('ja, die bestaat!');
} catch(error) {
  alert('nee, die ken ik niet!');
}

als ik voor newwindow box invul (de naam van het iframe) dan blijft ie beweren dat ie niet bestaat, ook al doet ie dat wel.

zou iemand me een zetje in de goede richting kunnen geven?

Verwijderd

Heb je niets aan de onload property van een iframe?, dus
<iframe name = "lala" id = "3" onLoad = "ladenMaar();"></iframe>

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hoe bedoel je dat precies? dat ik vanuit index.php het andere frame laadt? daar heb ik al aan gedacht, maar dat is niet echt de bedoeling. In die popup gebeurt een hoop qua php code die vervolgens de informatie bevat om de juiste pagina weer te geven in dat iframe. Ik vind het een beetje dirty om dat allemaal nog eens aan index.php door te geven. Dan moet ik daar namelijk ook weer allemaal (php) code in op gaan nemen om die onload goed te laten verlopen. Daar wordt het geheel niet echt duidelijker van. Wil het dus het liefste gewoon vanuit die popup oplossen

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 23:24
ik gok dat je je javascript in de Head hebt staan en die iframes in de Body van je hoofdpagina? je moet gewoon een onload gebruiken dus zo:
.
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html><head>
    [headshit]
    [javascriptshit]

    function LoadActie()
    {    [spreek iframe aan]
    }
</head>

<body onLoad="LoadActie();">

[frames]

</body></html>

[ Voor 47% gewijzigd door OnTracK op 17-07-2003 14:02 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hmm..ik denk dat ik niet helemaal duidelijk ben geweest.

ik zal het nog een keertje anders proberen uit leggen en gelijk wat meer informatie geven.

De situatie is als volgt:

Ik heb een pagina met 3 frames. links het menu, met daaronder een frame dat je niet ziet en waar elke 5 minuten een pagina gerefreshed wordt die op nieuwe berichten controleert. Rechts is het frame (met de naam body) met alle content
Op het moment dat er een nieuw berichtje is wordt er vanuit dat onzichtbare frame een popup geopend. Deze geeft een tekst weer hoeveel nieuwe berichten er zijn met een link waar op geklikt kan worden. Deze link moet er voor zorgen dat in de body-frame een nieuwe pagina met 3 iframes geladen wordt.

code van de javascript in het popupje zoals ik het nu heb:

JavaScript:
1
2
3
4
5
6
7
 function LoadPages()
 {
    window.open('/mail/index.php','body');  // opent de index-pagina met de 3 iframes
    // hier moet die while loop komen
    window.open('/mail/mail.php?map=1','box');  // de iframe waar de inbox getoond moet worden
    window.close();
 }
(LoadPages wordt geactiveerd zodra op die link geklikt wordt)

als ik dit lokaal op m'n harde schijf test (zonder een eventuele while loop) dan werkt het gewoon. maar online niet - en dat komt dus volgens mij doordat die framestructuur nog niet geladen is. mail.php wordt dan in een nieuwe window geopend.

Dus wil ik een while loop daar tussen zetten die net zolang blijft lopen als dat dat frame nog niet bestaat. En dat lukt dus niet.

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 23:24
je moet even kijken naar de hierarchie van de frames:
  • browservenster
    • menu
    • onzichtbaar
    • body (sowieso niet een goede naam, is gereserveerd voor JavaScript)
      • iframe1
      • iframe2
      • iframe3
window.open is niet echt de juiste manier om een frame aan te spreken, en moet volgens mij dan ook zijn:
• voor body: window.top.body.location = '/mail/index.php';
• voor iframe1: window.top.body.iframe1.location = '/mail/mail.php?map=1';

en als je persé wilt dat de iframe goed laadt zet je:
óf de tweede regel in een onload in body
óf tussen die twee regels een timeout

[ Voor 10% gewijzigd door OnTracK op 17-07-2003 14:32 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


  • cold45
  • Registratie: Juni 2002
  • Laatst online: 23:38

cold45

101101

zet er anders ff een timer tussen? (is wel lastig om dat goed te laten lopen maarja..)
is het niet mogelijk om die while loop op die index.php uit te voeren?
probeer anders ns
code:
1
2
window.opener.parent.body.location='/mail/index.php';
window.opener.parent.body.box.location='/mail/mail.php?map=1';

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
cold45 schreef op 17 July 2003 @ 14:25:
probeer anders ns
code:
1
2
window.opener.parent.body.location='/mail/index.php';
window.opener.parent.body.box.location='/mail/mail.php?map=1';
OnTracK schreef op 17 July 2003 @ 14:23:
je moet even kijken naar de hierarchie van de frames:
  • browservenster
    • menu
    • onzichtbaar
    • body (sowieso niet een goede naam, is gereserveerd voor JavaScript)
      • iframe1
      • iframe2
      • iframe3
window.open is niet echt de juiste manier om een frame aan te spreken, en moet volgens mij dan ook zijn:
• voor body: window.top.body.location = '/mail/index.php';
• voor iframe1: window.top.body.iframe1.location = '/mail/mail.php?map=1';
Waarom zou het geen goede manier zijn? het is gewoon een window opzich volgens mij. En daarbij: het werkt in alle browsers en geeft ook geen errors (ook niet in de javascript console van mozilla).
Zoals ik al zei: lokaal vanaf m'n harddisk werkt het geheel perfect. Ik hoef dus geen andere oplossingen om een pagina in dat frame te laden; dat is het probleem niet. Waar ik niet uit kom is het controleren op dat frame!
en als je persé wilt dat de iframe goed laadt zet je:
óf de tweede regel in een onload in body
Dat wil ik dus niet om eerder genoemde reden
óf tussen die twee regels een timeout
cold45 schreef op 17 July 2003 @ 14:25:
zet er anders ff een timer tussen? (is wel lastig om dat goed te laten lopen maarja..)
Dat wil ik dus wel. Maar ik wil niet zomaar een willekeurige timeout er tussen zetten. Als de verbinding net even wat langzamer is dan werkt ie nog niet en ik wil de gebruikers ook niet onnodig lang laten wachten.
Vandaar dat ik aan zo'n while loopje dacht dat op het bestaan van dat frame controleert. Dat lijkt me de meest cleane methode

en daarvan wil ik dus graag weten hoe het moet

  • cold45
  • Registratie: Juni 2002
  • Laatst online: 23:38

cold45

101101

marty schreef op 17 July 2003 @ 13:53:
hoe bedoel je dat precies? dat ik vanuit index.php het andere frame laadt? daar heb ik al aan gedacht, maar dat is niet echt de bedoeling. In die popup gebeurt een hoop qua php code die vervolgens de informatie bevat om de juiste pagina weer te geven in dat iframe. Ik vind het een beetje dirty om dat allemaal nog eens aan index.php door te geven. Dan moet ik daar namelijk ook weer allemaal (php) code in op gaan nemen om die onload goed te laten verlopen. Daar wordt het geheel niet echt duidelijker van. Wil het dus het liefste gewoon vanuit die popup oplossen
Kan je dan niet gewoon de results die je van die php code in je popup hebt meesturen naar die index.php (index.php?var1=blaat&var2=blabla) ?

k heb namelijk geen idee hoe je wilt kijken of je iframe bestaat...
maybe iets van
if(window.opener.parent.body.naamiframe) ?

[ Voor 8% gewijzigd door cold45 op 17-07-2003 14:44 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
cold45 schreef op 17 juli 2003 @ 14:43:
[...]

Kan je dan niet gewoon de results die je van die php code in je popup hebt meesturen naar die index.php (index.php?var1=blaat&var2=blabla) ?
Het antwoord daarvoor heb ik in het stukje wat je quote al gegeven

  • cold45
  • Registratie: Juni 2002
  • Laatst online: 23:38

cold45

101101

hmmz.. nog ff zitten denken... misschien zoiets:
code:
1
2
3
4
5
6
7
8
9
function iframecheck()
while (!window.opener.parent.body.box)
{
iframecheck()
}
else
{
window.open('/mail/mail.php?map=1','box');
}

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
cold45 schreef op 17 juli 2003 @ 14:43:
[...]

k heb namelijk geen idee hoe je wilt kijken of je iframe bestaat...
maybe iets van
if(window.opener.parent.body.naamiframe) ?
hebbus!
dat was het zetje wat ik nodig had :)
dit werkt:

window.opener.top.frames['body']['box']

als ik die alert geeft ie aan dat het een object is. Ga ik nu ff aan die while loop klussen. als ik het werkend heb post ik het wel.

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
dat stukje pseudo code wat ik eerder postte werkt eigenlijk gewoon ;)

JavaScript:
1
2
3
4
5
6
    window.open('mail.html','body');
    while (!window.opener.top.frames['body']['box'])
    {
        // we do nothing
    }
    window.open('gelukt.html','box');

Allen bedankt voor het meedenken

  • cold45
  • Registratie: Juni 2002
  • Laatst online: 23:38

cold45

101101

hmmz logisch jah... hoef die while niet aan te roepen... t is immers n while 8)7
naja, gefeli dat het is gelukt
Pagina: 1