FOK!forum / Digital Corner / [Java-script] Pre-refresh
ChOasvrijdag 24 januari 2003 @ 12:41
Een vraagje:

Ik wil graag door middel van Javascript een frame refreshen,
maar alleen wanneer er iets in dat frame veranderd is, en
snel...

Ik had dus het idee om gewoon een miniscuul frame op de server
te refreshen, waar een timestamp in zit...
Is het timestamp veranderd, wordt de pagina voor de ECHTE
pagina die ik wil refreshen binnen gehaald, en geswapped
met de huidige...

* still with me ? *

Om te proberen dacht ik eerst om stap 2 over te slaan, dus
gewoon in een keer dat frame refreshen... maar zelfs DAT
lukt niet...

Voorbeeld:

code:
+---------------+------------------+
|               |                  |
|               |                  |
|        A      |       B          |
|               |                  |
|               |                  |
+---------------+------------------+

Ik heb 2 frames, A en B... Ik heb nu een miniscuul
stukje javascript nodig dat ongeveer elke 5 seconden
frame "B" download, en kijkt of er een waarde in is
veranderd (waarde mag in een form staan, of waar dan
ook)
Zodra de waarde veranderd is, moet frame A gereload
worden...

Zo heb ik het ooit geprobeert:

code:
 <SCRIPT>
   var TimeStamp=parent.BFrame.document.Time.Stamp.value;

   function EventCheck()
   {
    if (! parent.BFrame.document.Time)
    {
     setTimeout("EventCheck()",5000);
    };
    parent.HiddenFrame.document.location.href='current.html';
    if (TimeStamp!=parent.HiddenFrame.document.Time.Stamp.value)
    {
     TimeStamp=parent.HiddenFrame.document.Time.Stamp.value;
     parent.BFrame.document.location.href='current.html';
     parent.ActiveFrame.document.location.href='active.html';
    }
    setTimeout("EventCheck()",2000);
   };
  </SCRIPT>


Iemand ENIG idee ?
ramHvrijdag 24 januari 2003 @ 12:49
Misschien zou het kunnen door in een onzichtbaar iframe de pagina opnieuw in te laden in een variabele. Die variabele te vergelijken met een andere (waarin dus de andere pagina zit) en als ze verschillen het frame bij te werken.
Of het werkt weet ik niet, code heb ik ook niet. Maar wie weet?
syllazvrijdag 24 januari 2003 @ 12:52
Je moet je TimeOut volgens mij buiten je functie zetten....
Nu zit ie in de functie en weet js niet wanneer ie die functie moet aanroepen
ChOasvrijdag 24 januari 2003 @ 12:54
quote:
Op vrijdag 24 januari 2003 12:52 schreef syllaz het volgende:
Je moet je TimeOut volgens mij buiten je functie zetten....
Nu zit ie in de functie en weet js niet wanneer ie die functie moet aanroepen
Ooops... sorry... die functie word bij onLoad() voor het
eerst aangeroepen
mvdlubbevrijdag 24 januari 2003 @ 12:55
ehm.
Ik ben niet erg thuis in Javascript (niet, zeg maar).

Maar logisch gezien:

er veranderde iets in B.
Daardoor moet er in A ook iets veranderen.

Een reload van de hele pagina, is dat nix?

ChOasvrijdag 24 januari 2003 @ 12:57
quote:
Op vrijdag 24 januari 2003 12:55 schreef mvdlubbe het volgende:
ehm.
Ik ben niet erg thuis in Javascript (niet, zeg maar).

Maar logisch gezien:

er veranderde iets in B.
Daardoor moet er in A ook iets veranderen.

Een reload van de hele pagina, is dat nix?


Daar zou ik mee kunnen beginnen... maar het probleem begint al eerder:
De verandering in dat timestamp frame wordt niet opgemerkt...
mvdlubbevrijdag 24 januari 2003 @ 13:00
quote:
Op vrijdag 24 januari 2003 12:57 schreef ChOas het volgende:

[..]

Daar zou ik mee kunnen beginnen... maar het probleem begint al eerder:
De verandering in dat timestamp frame wordt niet opgemerkt...


En de verandering van de inhoud van B is willekeurig. Er zit geen logica in anders dan random?
ChOasvrijdag 24 januari 2003 @ 13:02
quote:
Op vrijdag 24 januari 2003 13:00 schreef mvdlubbe het volgende:

[..]

En de verandering van de inhoud van B is willekeurig. Er zit geen logica in anders dan random?


B is het timestamp frame, en is inderdaad willekeurig...
(Unix time() + rand(10000)) dus zodra de server een aanpassing
in de pagina in frame A heeft gedaan schrijft hij een nieuwe
timestamp in frame B ... dat javascriptje moet dus de verandering
van het timestamp in B detecteren, en hierop A refreshen...
raphidaevrijdag 24 januari 2003 @ 13:09
In frame B een stukje javascript zetten die een variabele in frame A veranderd.
code:
<body onload="init(); return true;">
<script>
function init() {
  parent.framea.changingvar = "bla";
}
</script>

En dan in frame A elke 5 seconden ofzo changingvar checken of ie is veranderd, en dan reloaden als dat zo is.

Of een andere mogelijkheid.

B gooit onload de veranderende variabele in een var van A, maar voordat ie dat doet checkt ie of ie veranderd is (tov wat ie er eerder in had gegooid). Zo ja dan refreshed ie A.

ChOasvrijdag 24 januari 2003 @ 13:11
quote:
Op vrijdag 24 januari 2003 13:09 schreef raphidae het volgende:

En dan in frame A elke 5 seconden ofzo changingvar checken of ie is veranderd, en dan reloaden als dat zo is.

Of een andere mogelijkheid.

B gooit onload de veranderende variabele in een var van A, maar voordat ie dat doet checkt ie of ie veranderd is (tov wat ie er eerder in had gegooid). Zo ja dan refreshed ie A.


Kijk!... en DAT is dus het probleem... HOE doe ik dat ?
ramHvrijdag 24 januari 2003 @ 13:56
quote:
Op vrijdag 24 januari 2003 13:11 schreef ChOas het volgende:

[..]

Kijk!... en DAT is dus het probleem... HOE doe ik dat ?


In een onzichtbaar iframe.
ChOasvrijdag 24 januari 2003 @ 14:00
quote:
Op vrijdag 24 januari 2003 13:56 schreef ramH het volgende:

[..]

In een onzichtbaar iframe.


Prima, geen probleem... maar het probleem is het Java-script
ChOaszondag 26 januari 2003 @ 20:44

kickje

Schorpioenzondag 26 januari 2003 @ 21:24
Ik begrijp niet precies wat je nou wil. Wanneer verandert die timestamp dan? Doe je dat met een javascriptje, of doet de gebruiker dat?

Je kan wel aan een element een onChange hangen:

<INPUT TYPE="text" onChange="blabla();">

Die wordt dus getriggerd op het moment dat er iets wijzigt (zoals de waarde).

Je kan deze overal aan koppelen, ook bijv aan de body.
Misschien dat dat je probleem al oplost?

ChOasmaandag 27 januari 2003 @ 09:34
quote:
Op zondag 26 januari 2003 21:24 schreef Schorpioen het volgende:
Ik begrijp niet precies wat je nou wil. Wanneer verandert die timestamp dan? Doe je dat met een javascriptje, of doet de gebruiker dat?

Je kan wel aan een element een onChange hangen:

<INPUT TYPE="text" onChange="blabla();">

Die wordt dus getriggerd op het moment dat er iets wijzigt (zoals de waarde).

Je kan deze overal aan koppelen, ook bijv aan de body.
Misschien dat dat je probleem al oplost?


De server veranderd de timestamp...

Okay.. als voorbeeld: Ik heb een camera op mijn deur gericht staan,
en dat ding maakt elke seconde een foto
van 1 Mb... nou kan ik dat ding met mijn webbrowser bekijken,
maar refreshen duurt natuurlijk lang, en daar heb ik geen
zin in... DUS ... als de bel gaat schrijft de server een
nieuw timestamp in een filetje, wat gepolled wordt door
de browser, dit wordt gedetecteerd door (het op dit moment
nog niet bestaande ) javascript, en het frame met de foto wordt gerefreshed.

Dit was dus maar een voorbeeld, dus denk alsjeblieft niet
dat ik een camera of watdanook heb hangen, het gaat alleen
om het principe...

[Dit bericht is gewijzigd door ChOas op 27-01-2003 12:56]

ChOasmaandag 27 januari 2003 @ 12:56

tussendemiddagschopje

Roonaanmaandag 27 januari 2003 @ 13:13
Als je dan in framepje B een of andere php laadt

myrefresh.php?current_timestamp=timestamp; en die gooit er uit

code:
<!--niets...-->
of
code:
<script>
parent.FRAME_A_NAME.document.location = parent.FRAME_A_NAME.document.location;
</script>

Afhankelijk van of je timestamp overeenkomt met die andere pagina..

?

ChOasmaandag 27 januari 2003 @ 13:27
quote:
Op maandag 27 januari 2003 13:13 schreef Roonaan het volgende:
Als je dan in framepje B een of andere php laadt

myrefresh.php?current_timestamp=timestamp; en die gooit er uit

code:
<!--niets...-->
of
code:
<script>
parent.FRAME_A_NAME.document.location = parent.FRAME_A_NAME.document.location;
</script>

Afhankelijk van of je timestamp overeenkomt met die andere pagina..

?


Die ga ik eens proberen!... thanks!