TomE: Suchfunktion

Hallo,

wie kann man in JavaScript am Besten eine Suchfunktion für alle Texte einer Homepage umsetzen? Hab mir das so überlegt, dass ich alle Seiten der Homepage in unsichtbare iFrames lade. Mit diesen kann ich dann per innerText den Textinhalt der Seiten auslesen lassen und überprüfen, wenn ein Textteil mit meinem Suchtext übereinstimmt. Dumm ist nur, dass auch die Bilder und so in den iFrames geladen werden und somit die Ladezeit ziemlich hoch ist. Gíbts da was, mit dem das Laden der Bilder verhindert werden kann? Oder bin ich hier völlig auf dem Holzweg?
Hab mir auch schon überlegt, ob ich nicht einfach ein paar Arrays (für jede Seite) mit Schlagwörtern mache. Stimmt ein Suchbegriff mit einem Schlagwort überein, wird zur entsprechenden Seite weitergeleitet, oder die Suchtreffer werden aufgelistet. Oder wie macht man das am Besten. Das ganze sollte halt nur mit Hilfe von JavaScript und HTML umgesetzt werden.

Gruß

  1. Hallo,

    warum mit javascript? Hast Du PHP auf Deinem Server zur Verfügung? Wenn nicht solltest Du wechseln. Ich mache das gerade, baue mir einen Crawler, der überträgt die Seite in eine DB und dann kann ich über PHP und MySQL eine Datanbankbasierte Suchfunktion machen, trotz einer Homepage, die nicht Datenbankbasiert ist.

    Liebe Grüße

    Stephan

    1. Hallo,

      warum mit javascript? Hast Du PHP auf Deinem Server zur Verfügung? Wenn nicht solltest Du wechseln. Ich mache das gerade, baue mir einen Crawler, der überträgt die Seite in eine DB und dann kann ich über PHP und MySQL eine Datanbankbasierte Suchfunktion machen, trotz einer Homepage, die nicht Datenbankbasiert ist.

      Ich möchte das gerne ohne PHP und Datenbank umsetzen. Kostet ja alles extra.

      Aber Danke ;-)

  2. Hi,

    per innerText den Textinhalt der Seiten auslesen lassen

    Dazu schrieb ich Dir gerade im anderen Thread.

    Dumm ist nur, dass auch die Bilder und so in den iFrames geladen werden und somit die Ladezeit ziemlich hoch ist. Gíbts da was, mit dem das Laden der Bilder verhindert werden kann?

    Klar. Frag ab, ob das Dokument in diesem IFRAME läuft und schmeiß schon vor dem Ende des Ladens alle Tags raus, bzw. hole die Seite gleich in eine Variable und lösche sie dann (innerHTML: JavaScript 1.5) oder ersetze zumindest alle Grafiken durch kleine Dummys (document.images: JavaScript 1.1).

    Oder bin ich hier völlig auf dem Holzweg?

    Wenn Du keine Servertechnik verwenden willst, dann erstelle doch offline von deinen Seiten per "Hier die Sprache deiner Wahl" eine reine Textversion (macht auch ein guter HTML-Editor).

    Entferne dann noch die Zeilenumbrüche, und du hast pro Seite eine schöne Zeile.

    Hab mir auch schon überlegt, ob ich nicht einfach ein paar Arrays (für jede Seite) mit Schlagwörtern mache.

    selfHTML hat auch ein Offline-Schlagwortverzeichnis (s. "Quickbar").

    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,

      Dazu schrieb ich Dir gerade im anderen Thread.

      Danke dafür.

      Klar. Frag ab, ob das Dokument in diesem IFRAME läuft und schmeiß schon vor dem Ende des Ladens alle Tags raus, bzw. hole die Seite gleich in eine Variable und lösche sie dann (innerHTML: JavaScript 1.5) oder ersetze zumindest alle Grafiken durch kleine Dummys (document.images: JavaScript 1.1).

      Woher weiß ich, wenn die Seite alle Tags und Texte geladen hat und wann ich die Seite löschen darf?

      Wenn Du keine Servertechnik verwenden willst, dann erstelle doch offline von deinen Seiten per "Hier die Sprache deiner Wahl" eine reine Textversion (macht auch ein guter HTML-Editor).

      Dann muss ich bei jeder Änderung praktisch zwei Seiten editieren, oder?

      Gruß

      1. Hi,

        Woher weiß ich, wenn die Seite alle Tags und Texte geladen hat und wann ich die Seite löschen darf?

        Mach das Löschen auf/von der Seite selbst und pack den Aufruf dazu ans Ende der Seite (direkt vor, bzw. direkt hinter dem /BODY)

        Dann muss ich bei jeder Änderung praktisch zwei Seiten editieren, oder?

        Yep. Ein kleines(!) Progamm kann Dir dann auf Knopfdruck eine solche Index-Datei deiner lokalen HTML-Daeien erstellen.

        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,

          Mach das Löschen auf/von der Seite selbst und pack den Aufruf dazu ans Ende der Seite (direkt vor, bzw. direkt hinter dem /BODY)

          Hab das mal gemacht, aber er bringt dann den Fehler "Objekt erforderlich"

          <script language="JavaScript">
          <!--
          noHtml(document.Testframe.document.body.innerHTML);
          iFrameLeeren();
          //-->
          </script>

          Anscheinend, weil der iFrame noch nicht fertig geladen ist. Wenn ich die Funktionen über Links aufrufe klappts schon.

          Sollte ich vielleicht vor dem Ausführen der Funktionen ein setTimeout() einbauen?

          Gruß

          1. Hi,

            Anscheinend, weil der iFrame noch nicht fertig geladen ist.

            Im iFrame-Dokument aufgerufen?!

            Kurzschreibweise:

            </body>
            <script>
            Inhalt=document.getElementById("body")[0].innerHTML
            document.getElementById("body")[0].innerHTML="Nun leer ;-)"
            </script>
            </html>

            In eine Funktion packen, selbige in ein externes Script, daß auf deinen Seiten immer aufgerufen wird, und wenn die Seite in deinem IFRAME läuft, ausgeführt wird. Der IFRAME enthält dann ein leeres Dokument, Inhalt die Seite.

            Sollte ich vielleicht vor dem Ausführen der Funktionen ein setTimeout() einbauen?

            Niemals Zustände von einem Timeout abhängig machen - höchstens die Abfragen nach ihm (was sich meist i.d.R. vermeiden läßt).

            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,

              Im iFrame-Dokument aufgerufen?!

              äh, jetzt schon.

              Kurzschreibweise:

              </body>
              <script>
              Inhalt=document.getElementById("body")[0].innerHTML
              document.getElementById("body")[0].innerHTML="Nun leer ;-)"
              </script>
              </html>

              In eine Funktion packen, selbige in ein externes Script, daß auf deinen Seiten immer aufgerufen wird, und wenn die Seite in deinem IFRAME läuft, ausgeführt wird. Der IFRAME enthält dann ein leeres Dokument, Inhalt die Seite.

              Geht wie die Sau.

              Danke

              (P.S. hatte gestern plötzlich keine Zeit mehr.)

        2. Nachtrag:

          Yep. Ein kleines(!) Progamm kann Dir dann auf Knopfdruck eine solche Index-Datei deiner lokalen HTML-Daeien erstellen.

          BTW: Eine kleine (quick'n'dirty) (GfA-)Basic-Routine zum Entfernen einfacher HTML-Tags (also ohne Tag-in-Tag) kann ich Dir übrigens noch anbieten:

          http://www.vampirehost.de/gruft/coding/gfabas/fields.htm

          Läuft mit einer entsprechenden Library sogar in JavaScript ...

          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,

            BTW: Eine kleine (quick'n'dirty) (GfA-)Basic-Routine zum Entfernen einfacher HTML-Tags (also ohne Tag-in-Tag) kann ich Dir übrigens noch anbieten:

            http://www.vampirehost.de/gruft/coding/gfabas/fields.htm

            Läuft mit einer entsprechenden Library sogar in JavaScript ...

            Supi, Danke