Claude: DoEvents (VB) auch für Javascript

Hallo, hier ist wieder der Anfänger ;-) (nicht schimpfen...)
Habe eine einfache Suchfunktion gebastelt, um die aktuelle Seite durchzusuchen.
Bei Seiten mit ZB 2500 Einträge, dauert die Suche über 20 Sekunden.
Um den Benutzer anzuzeigen, das die Suche läuft, habe ich mit open() ein kleines PopUp geöffnet, mit "Bitte warten". Lokal klappt das gut, aber über's Internet hat das Popup keine Zeit oder Ressource, den Inhalt anzuzeigen, das Fenster bleibt leer. Grund: Der restliche Script frisst alle Ressourcen, und blockiert alles.

In VB und VBA gibt es DoEvents, um Ressourcen an das Betriebsystem freizugeben,

Sowas sollte ich hier auch haben.
Oder eine Art "wait", das wartet bis das Popup angezeigt ist.
Hier der Anfang des Scripts:

function searcher(suchwortges)
{

infofenster = window.open("zbwarten.htm", "Zweitfenster", "width=350,height=100,left=200,top=300");
infofenster.focus();
....
Dann geht es weiter mit der Suchfunction
....am Ende.
infofenster.close();

Danke für Hinweise.

mfg
Claude

  1. Hallo Claude,

    evtl. kannst Du dein Problem mit setTimeout lösen: Fenster öffnen und Suchfunktion etwas später starten. Mit setTimeout/setInterval kann man auch verhindern, dass rechenintensive Scripte den Browser einfrieren und eine entsprechende Meldung erscheinen lassen.

    Gruß, Jürgen

    1. Hallo Jürgen,

      Danke für den Tipp. Werde ich heute Abend testen.

      Gruss
      Claude

    2. Hallo Jürgen,
      Danke nochmal, hat funktioniert, hier die Lösung:

      +++
      var suchwortges2 = ""

      function searcher(suchwortges1)
      {
      infofenster = window.open("zbwarten.htm", "Zweitfenster", "width=350,height=100,left=200,top=300");
      infofenster.focus();
      suchwortges2 = suchwortges1;
      window.setTimeout("searcher2(suchwortges2)",3000);
      }

      function searcher2(suchwortges)
      {
      usw.... hier die eigentliche Suchfunktion
      }
      +++

      Habe die Funktionen trennen müssen. Wenn man die Lösung in eine einzelne Funktion packen will, funktionnniert es nicht, da der Browser sofort mit der nächsten Anweisung fortgeführt, und die CPU-Auslastung bleibt 100%.
      Das nächste Problem war das durchschleusen der Variable "suchwortges". Vielleicht hat jemand eine elegantere Lösung.
      Der Wert von 3000 muss ich jetzt noch nach unten optimieren.

      Danke nochmal.

      mfG
      Claude

      1. Hallo Claude,

        Der Wert von 3000 muss ich jetzt noch nach unten optimieren.

        Du könntest per onload im Popup die Funktion searcher2 aufrufen. Dies geht über opener.searcher(). So ist sichergestellt, dass die Funktion erst startet, wenn das Popup da ist. setTimeout ist dann nicht mehr nötig.

        Auf Übergabeparameter würde ich dann verzichten und lieber den Suchbegriff als Globale Variable zwischenspeichern.

        Allerdings müsste das ganze auch mit kleinen Verzögerungszeiten, z.B. 1 ms funktionieren. So weit ich weiß, wird mit setTimeout ein weiterer Thread aufgemacht, der parallel läuft.

        Gruß, Jürgen