JS-Suchscript soll auch im Firefox funktionieren.

FRitter

Erfahrenes Mitglied
Hallo an alle!

Das folgende Script läuft im MSIE4/5/6 sowie NS4/6 einwandfrei - es sollte aber auch mittels Firefox klappen. Mein Problem an diesem Script ist, dass ich es gerne nur an den notwendigen Stellen minimal anpassen möchte, da ich es auf sehr vielen Seiten im Einsatz habe und bislang auch ohne Probleme...Wieso werden aber anfangs in die Var. "NS4" und "IE4" diese Werte übernommen? Es funktioniert ja z.B. auch Var. "IE4" mit dem IE6...das Script ist für mich etwas verwirrend! Oder klappt es nicht mit der Übergabe der Variablen vom Form an JavaScript ?

Was meinen die Profis von JS ? Danke im Voraus für eure Mühe!


Code:
<script language="JavaScript">
<!--
var NS4 = (document.layers);
var IE4 = (document.all);
var win = window;
var n   = 0;
function findInPage(str) {
  if (document.search.string.value == "") {
    alert(".....Bitte Suchbegriff eingeben !.....");
    document.search.string.focus();
  }
  var txt, i, found;
  if (str == "")
    return false;
  if (NS4) {
    if (!win.find(str))
      while(win.find(str, false, true))
        n++;
    else
      n++;
    if (n == 0)
        alert(".....Keine Einträge gefunden !.....");
  }
  if (IE4) {
    txt = win.document.body.createTextRange();
    for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
      txt.moveStart("character", 1);
      txt.moveEnd("textedit");
    }
    if (found) {
      txt.moveStart("character", -1);
      txt.findText(str);
      txt.select();
      txt.scrollIntoView();
      n++;
    }
    else {
      if (n > 0) {
        n = 0;
        findInPage(str);
      }
      else
        alert(".....Keine Einträge gefunden !.....");
        document.search.string.focus();
    }
  }
  return false;
}
//-->
</script>

<form name="search" onsubmit="return findInPage(document.search.string.value);">
<input name="string" type="text" id="input" size="68" tabindex="1" onchange="n = 0;">

<input style=cursor:pointer type="button" id="button" onFocus="return findInPage(document.search.string.value);" name="submit_search" value="suchen" tabindex="2">
</form>
 
Du hebelst die Gecko-Browser in diesem Script damit aus, dass es nur funktioniert, wenn der Browser "document.all" (IE4) und/oder "document.layers" (NS4) kennt. Das bewirken nämlich die beien if-Abfragen und haben nichts mit dem eigentlichen Browser zu tun - die Namensgebung der Variablen ist da irreführend (z.B. unterstützt der IE4 "document.all", aber Opera und andere Browser und natrülich spätere IE-Verionen tun das auch). Beide Objekte, "document.all" wie auch "document.layers" sind aber mehr als veraltet und werden seit Einführung des DOMs (Document Objekt Model) eigentlich nicht mehr verwendet. Daher unterstüzten sie die Gecko-Browser, darunter auch Firefox, und viele andere nicht mehr.

Du must also noch vor die beiden anderen Abfragen eine setzen, die überprüft, ob das DOM unterstützt wird. Das geht z.B. mit "if(document.getElementById)". In diesem If-Zweig dürfen dann die beiden anderen Objekte nicht benutzt werden, also nichts von "document.all" und "document.layers". Vorsicht hier, auch bei Befehlen, in denen nichst von "all" oder "layers" stehen können sich auf diese Objekte beziehen.

Ich möchte dich noch im Weiteren bitten von Fragen wie "Ich kann leider nur ganz wenig Javascript, könnt mir das Script nicht anpassen?" abzusehen. Wir sind ein Forum und keine Jobbörse, Schule oder Script-Datenbank. Wir setzen eine gewissen Lehrnwillen, gewisse Eigeninitiative und gewisse Grundkenntnisse voraus. Du musst dein Script schon verstehen und in der Lage sein solche Tipps wie den eben selbst umzusetzten. Alles andere hieße Arbeit für uns und Arbeit wird gewöhnlich bezahlt. Das nur für die Zukunft.
Sorry, dass ich dir das jetzt sage. Ich habe einfach mal von dem, was du so geschrieben hast auf deinen Kenntnisstand geschlossen und es sieht einfach so aus, als hättest du das Script nicht selbst geschrieben und würdest es auch nicht annhäherd verstehen.
Sollte nicht beleidigend sein und wenn ich falsch liege, nehme ich alles zurück und behaupte das Gegenteil.

Hoffe das hat dir trotzdem weitergeholfen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück