Jan Kerssenfischer: onblur/onfocus im Frame (counter nur wenn aktiv)

Hallo liebe Selfhtml Gemeinde,

Ich habe mich mal daran versucht einen Counter im Frame zu machen, der aber nur abwärts zählen soll wenn das Fenster aktiv ist. Nunja man sollte meinen nicht alzu schwer. Naja nach diversen Versuchen bin ich erstmal am ende meiner Weissheit vielleicht könnt ihr mir ja weiterhelfen. Also die naheliegende Lösung wäre:

Das Parent Frame:

<head id="test">
<script>

var run = 1;

onblur = Stop;
onfocus = Start;

function Stop (Ereignis) {
  run = 0;
}

function Start (Ereignis) {
  run = 1;
}
</script>

<frameset rows="75,*" border="0" id = "0" >
<frame name="abuse" src="2.html" scrolling="no" frameborder="0" id="a">
<frame name="werbung" src="test.html" scrolling="auto" frameborder="0" id ="b">
</frameset>

</head>

Die 2.html:
<html><head><title>Test</title>
<script type="text/javascript">

window.setTimeout("countdown()",1000);
var count = 100;

function countdown () {
 if (parent.run > 0) count = count -1 ;
 if (count != 0) window.setTimeout("countdown()",1000);
 document.getElementById("a").value = count;
}

</script>
</head><body>
<input type="text" name="a" id="a" value="100">
</body></html>

und test darf irgentwas sein :)

Das klapt so wies da steht auc soweit, das der Countdown läuft und wenn man ein andere Fenster aktiviert auffhört und man zurückgeht weitermacht. Soweit so gut. Klickt man aber nun innerhalb des Fensters wird leider ebenfalls gestoppt. Dann kann man das so auch nicht mehr aktivieren. Ein zusätzliches onfocus = parent.start; in 2.html bringt scheinbar auch nicht alzuviel. Hatte schon diverse Sachen getestet aber irgentwie hat ich keinen erfolg. (im FF hatte ich glaube ich mal was lauffähiges was dann aber im IE nicht klappte)

Ich hoffe ihr könnt mir helfen,
Jan
P.s: Ahcja die Dateien wie oben beschrieben findet ihr hier: http://www.casino-tempel.de/1.html

  1. Hallo Jan

    <head id="test">

    Nichteinmal <html> davor?

    <script>

    Hier fehlt das type-Attribut.

    var run = 1;

    onblur = Stop;
    onfocus = Start;

    Onfocus und onblur sind meines Wissens für window nicht definiert und auch
    nicht für frameset oder frame.
    (onFocus (beim Aktivieren), onBlur (beim Verlassen))

    function Stop (Ereignis) {
      run = 0;
    }

    function Start (Ereignis) {
      run = 1;
    }
    </script>

    Hier sollte wohl </head> stehen.

    <frameset rows="75,*" border="0" id = "0" >
    <frame name="abuse" src="2.html" scrolling="no" frameborder="0" id="a">
    <frame name="werbung" src="test.html" scrolling="auto" frameborder="0" id ="b">
    </frameset>

    </head>

    hier wohl besser </html>

    Die 2.html:
    <html><head><title>Test</title>
    <script type="text/javascript">

    window.setTimeout("countdown()",1000);
    var count = 100;

    Hier wäre dann wohl Folgenses sinnvoll:

      
    document.onblur = parent.Stop;  
    document.onfocus = parent.Start;  
    
    

    Je nachdem, wann der Counter stoppen soll, auch in den anderen Dokumenten,
    die ins Frameset geladen werden.

    Du könntest auch eine Funktion im Frameset notieren:

      
    function init(mydoc){  
      mydoc.onblur = Stop;  
      mydoc.onfocus = Start;  
    }  
    
    

    Und in <body> aller Seiten, bei denen der Counter laufen soll:

    <body onload="parent.init(this)">

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Hi,

      <head id="test">
      Nichteinmal <html> davor?

      Ist optional.

      Onfocus und onblur sind meines Wissens für window nicht definiert und auch

      Doch. Nur bei uralten Browsern (z.B. Navigator 2) nicht.

      nicht für frameset oder frame.

      Gleiches gilt natürlich für das Parallel-Objekt frame.

      Um auch für zukünftige Browser (mit einer anderen aber irgendwie halbwegs kompatiblen Scriptsprache als JavaScript oder JScript ;-)) sicherzugehen, sollte man vorher einfach abfragen: if(window.focus) ...

      Hier sollte wohl </head> stehen.

      Ist, wie auch <head>, optional.

      hier wohl besser </html>

      Ebenfalls optional.

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      1. Hi,

        hier wohl besser </html>

        Ebenfalls optional.

        was aber nichts daran ändert, daß </head> hier nicht hingehört, da es wie gesagt optional ist und vor <frameset> zu schließen ist.

        freundliche Grüße
        Ingo

        1. Hi,

          was aber nichts daran ändert, daß </head> hier nicht hingehört, da es wie gesagt optional ist und vor <frameset> zu schließen ist.

          Oh ja, selbstredend. %-)

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!