Avatar billede thulstrup Nybegynder
30. april 2003 - 11:08 Der er 21 kommentarer og
1 løsning

funktion og setTimeout problemer

jeg har et frameset der ser sådan her ud:

<frameset rows="*,0" frameborder="NO" border="0" framespacing="0">
    <frame src="flashpage.php" name="main" frameborder="NO">
    <frame src="nyheder.php" name="bottom" frameborder="NO">
</frameset>


På siden nyheder.php har jeg et script der kalder funktionen setPage() på siden flashpage.php:

<script language="JavaScript" type="text/javascript">
<!--
function frameWait() {
    if (parent.frames.length!=2){
        window.setTimeout('frameWait();',10);
    } else {
        parent.main.setPage('nyheder');
    }
}
frameWait();
//-->
</script>


Da nyheder.php ofte loader hurtigere end flashpage.php, har jeg brugt setTimeout for at undgå at setPage() bliver kaldt før den er loadet. Men der noget der ikke er rigtigt, for nogle gange får jeg en "Object doesn't support this property or method" på den linie hvor setPage() bliver kaldt.
Hvad er der galt?
Avatar billede nikolajdu Nybegynder
30. april 2003 - 11:11 #1
timerDu = setTimeout('frameWait()',10);

og

clearTimeout("timerDu");
Avatar billede =maddog= Nybegynder
30. april 2003 - 11:17 #2
nikolajdu> scriptet "venter" på at der er loaded to frames så framsettet er klar da <frameset> ikke understøtter onload="", en hack lavet af undertegnede

hey cellblock>
ligger der en funktion i "main" der hedder setPage()???
Avatar billede =maddog= Nybegynder
30. april 2003 - 11:19 #3
nikolajdu>
oh jeg er med
function frameWait() {
    if (parent.frames.length!=2){
        timerDu = window.setTimeout('frameWait();',10);
    } else {
        clearTimeout("timerDu");
        parent.main.setPage('nyheder');
    }
}
Så vi ikke lader scheduleren stå og idle mens den venter på vi sætter Timeout igen. Resource spild, men ikke det direkte problem.
Avatar billede thulstrup Nybegynder
30. april 2003 - 11:23 #4
=maddog=> Hej igen, som du nok kan se har jeg prøvet at få dit script fra spm http://www.eksperten.dk/spm/344692 til at fungerer, men det virker stadig ikke helt. Og ja, setPage() ligger i main framen.
Avatar billede thulstrup Nybegynder
30. april 2003 - 11:27 #5
nikolajdu> Jeg går ud fra et dit indlæg kun var ment som en optimering af scriptet og ikke som et løsningsforslag...
Avatar billede =maddog= Nybegynder
30. april 2003 - 11:31 #6
function frameWait() {
    if (parent.frames.length!=2){
        timerDu = window.setTimeout('frameWait();',10);
    } else {
          if (parent.main) {
            clearTimeout(timerDu);
            alert("Vi HAR loaded main. Der er ugler i mosen");
            parent.main.setPage('nyheder');
        } else {
              alert("Hack'et duer af en eller anden grund ikke.\nMå vi kigge på.");
        }
    }
}

Hvilken af disse alert's får du?
Avatar billede thulstrup Nybegynder
30. april 2003 - 11:49 #7
Jeg får ingen af dem, men er det ikke bare fordi at det er frames?
Avatar billede nikolajdu Nybegynder
30. april 2003 - 11:50 #8
du husker vel at starte funktionen ikee.... ;-)
Avatar billede =maddog= Nybegynder
30. april 2003 - 11:56 #9
som nikolajdu siger -> jeg har ikke sat frameWait(); nederst denne gang. Du har vist glemt, at det ikke skulle slettes - kun funktionen (bemærk venligst min finte for at skyde skylden fra mig)
Avatar billede thulstrup Nybegynder
30. april 2003 - 11:57 #10
jo jo :0)
Avatar billede thulstrup Nybegynder
30. april 2003 - 11:58 #11
jo jo, som i jo jo jeg har husket at starte funktionen...
Avatar billede thulstrup Nybegynder
30. april 2003 - 12:03 #12
Der er ugler i mosen...

Alert skulle lige flyttes op før clearTimeout:

function frameWait() {
    if (parent.frames.length!=2){
        timerDu = window.setTimeout('frameWait();',10);
    } else {
          if (parent.main) {
            alert("Vi HAR loaded main. Der er ugler i mosen");
            clearTimeout(timerDu);           
            parent.main.setPage('nyheder');
        } else {
              alert("Hack'et duer af en eller anden grund ikke.\nMå vi kigge på.");
        }
    }
}
Avatar billede =maddog= Nybegynder
30. april 2003 - 12:06 #13
var timerDu=null;
aller aller øverst.
Avatar billede thulstrup Nybegynder
30. april 2003 - 12:06 #14
Og så skal "parent.main.setPage('nyheder');" også lige flyttes op før clearTimeout, for at det virker.
Men stadig ca. 1 ud af 10 gange får jeg en fejlmeddelse?
Avatar billede thulstrup Nybegynder
30. april 2003 - 12:10 #15
Ingen forskel med "var timerDu=null;"
Avatar billede thulstrup Nybegynder
30. april 2003 - 12:25 #16
Lige for at opsumere ser scriptet nu sådan her ud:

<script language="JavaScript" type="text/javascript">
<!--
function frameWait() {
    var timerDu = null;
    if (parent.frames.length!=2){
        timerDu = window.setTimeout('frameWait();',10);
    } else {
          if (parent.main) {
            alert("Vi HAR loaded main. Der er ugler i mosen");
            parent.main.setPage('nyheder');
            clearTimeout(timerDu);
        } else {
              alert("Hack'et duer af en eller anden grund ikke.\nMå vi kigge på.");
        }
    }
}
frameWait();
//-->
</script>


Jeg har opdaget at så længe alertboxen (Vi HAR loaded main. Der er ugler i mosen) kommer frem virker det, men hvis jeg fjerner den virker det igen ikke hver gang. Det er som om alertboxen lige giver den ekstra tid der skal til før det hele er loadet. Det er jo desværre bare ikke så fedt med en alertbox når man starter en side...
Avatar billede thulstrup Nybegynder
30. april 2003 - 12:42 #17
Så tror jeg sq at den var der! Problemet var at flash'en ikke altid nåede at loade, så nu checker scripet også om flash'en er loaded:

<script language="JavaScript" type="text/javascript">
<!--
function frameWait() {
    var timerDu = null;
    if (parent.frames.length!=2){
        timerDu = window.setTimeout('frameWait();',10);
    } else {
          if (parent.main.flashLoaded == 1) {           
            parent.main.setPage('nyheder');
            clearTimeout(timerDu);
        } else {
            timerDu = window.setTimeout('frameWait();',10);             
        }
    }
}
frameWait();
//-->
</script>

Tak for hjælpen begge! I må lige smide nogle svar, hvis i vil ha' point.
Avatar billede nikolajdu Nybegynder
30. april 2003 - 12:44 #18
giv den bare till høvding "gale hund" ;-)
Avatar billede =maddog= Nybegynder
30. april 2003 - 14:42 #19
ahhhr, det er fordi flash loader asynchront.
hvad, sku' vi ikke tage en deler nikolajdu?
Avatar billede nikolajdu Nybegynder
30. april 2003 - 14:43 #20
næh jeg vil hellere ha en bajer ;-)
Avatar billede thulstrup Nybegynder
30. april 2003 - 15:40 #21
Deal! Point til dig =maddog= og en bajer til dig nikolajdu, næste gang du komme forbi Århus :-)
Avatar billede =maddog= Nybegynder
30. april 2003 - 15:43 #22
nikolajdu> Det må finde ud af, men jeg ikke set dig på icq'en i en rum tid.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester