Peter: Netscape-Problem mit Javascript

Hallo!
Ich hab' ein Problem mit Netscape. Folgendes Script läuft unter IE problemlos und führt zu den gewünschten Ergebnissen:

<script language="javascript" src="Textkon0.js"></script>
<script language="javascript" src="Index.js"></script>
<script language="javascript">
<!--
//Arrays füllen
init_db ();
init_index ();

function abfrage()
{
 var Eingabe, a, b;
 Eingabe=prompt ("Suchtext", "");
 if (Eingabe != "")
  {
   var Treffer = 0;
   document.open ();
   document.writeln ("<html><head></head><body><h1>Suchergebnis für '" + Eingabe + "'</h1>");
   Eingabe=Eingabe.toLowerCase(); // Umwandlung in Kleinschreibung
   for (a=0; a<db.length; a++)
    {
     if (db[a][0] == Eingabe) // Wenn gefunden
      {
       for (b=1; b<db[a].length; b++) // Für alle Spalten von "db"
        {
         if (db[a][b] != "") // Wenn Spalte nicht leer
          {
           document.writeln ("<a href='" + index[db[a][b]] + ".htm'>" + index[db[a][b]] + ".htm</a><br>");
           Treffer++;
          }
        }
      }
    }
   document.writeln ("<h3>" + Treffer + " Suchtreffer</h3>");
   document.writeln ("</body></html>");
   document.close ();
  }
}
//-->
</script>

Der NS wirft in der Zeile "if (db[a][0] == Eingabe)" den Fehler "db is not defined" aus.

Kann mir jemand helfen?

Vielen Dank
Peter

N.S.: Anliegend noch die Köpfe der eingebundenen .js-Dateien:

//Index.js
var index=new Array();
function init_index () {
  index[1] = "31551112_96";
  index[2] = "82025287";
...

//Textkon0.js
var db=new Array (52);
function init_db () {
  for (a=0; a<52; a++)
   {
    db [a]=new Array (81);
   }
  db[0][0]="000";
  db[0][1]="2";
...

  1. Hi,

    wenn ich nicht was entscheidendes verpasst habe,
    kann Netscape db garnicht kennen.

    wo ist es deklariert? ich glaube nicht, das
    eine deklaration einer Variable in einer externen
    Datei fuer ein Javascript in einer HTML-Seite
    ausreicht. Ausserdem meine ich mich zu entsinnen,
    das 'var ' die Variable zu einer 'lokalen Variable'
    macht.

    Wenns im IE funktioniert, liegt das nur daran,
    dass der IE nicht so 'genau' beim interpretieren
    des Codes ist.

    Gruss
    Sonia

    1. Hi Sonia,
      wenn man im NS nach der Zeile
         var Treffer = 0;
      z.B. ein "alert (db[0][0]);" macht, ist die Ausgabe noch richtig...
      Grundsätzlich ist db also auch dem NS "bekannt"; nur dann geht's nicht weiter...
      Gruß  Peter

  2. Hallo Peter!

    Wie groß sind denn die js-Dateien? Ich hatte mal Probleme, wenn eine Grenze von 32000 Byte überschritten wurde. Probiere es doch mal mit minimierten Dateien.

    Norbert

    1. Hallo Norbert!

      Wie groß sind denn die js-Dateien?

      Die Textkon0.js ist ca. 74 kByte groß.

      Zu den minimierten Dateien dann direkt die Frage:
      Muss man db[x][y]="" überhaupt zuweisen oder hat db[x][y] auch ohne explizietes Zuweisen den Wert ""?
      Dann könnte ich die Dateien auch minimieren. Ansonsten wird's problematisch. Aber trotzdem Danke für den Tipp.

      Peter

      1. Hallo Peter!

        Mit minimieren meinte ich zunächst einmal, es mit nur wenigen Datensätzen zu probieren. So kannst Du eventuell ein Größenproblem als Ursache identifizieren.

        Die Frage nach der Notwendigkeit der Variablen-Initialisierung kann ich Dir leider nicht auf Anhieb beantworten.

        Norbert

        1. Mit minimieren meinte ich zunächst einmal, es mit nur wenigen Datensätzen zu probieren. So kannst Du eventuell ein Größenproblem als Ursache identifizieren.

          Hab' ich ausprobiert. Die Fehlermeldung kommt auch wenn die Dateien <10 kByte haben :-(

          Die Frage nach der Notwendigkeit der Variablen-Initialisierung kann ich Dir leider nicht auf Anhieb beantworten.

          In der einschlägigen Literatur (auch "selfhtml") hab' ich leider auch keine Antwort auf die Frage gefunden :-(

          Dank für Deine Mühe! :-)
          Peter

          1. Maile mir die Dateien (mit Dummy-Daten) doch mal für einen Test zu. Am "lebenden Objekt" sind Fehler einfacher zu finden.

            Norbert

  3. Hi Peter,

    ein Schuss ins Blaue:
    Die Stelle, an der der Fehler auftritt, ist der erste Aufruf von db nach document.open - vielleicht rechnet Netscape db jetzt dem neu geöffneten Dokument zu, wo's ja nicht definiert ist.

    Es könnte einen Versuch wert sein, diese Schleife aus dem document.open-Bereich rauszunehmen, also etwa so:

    function abfrage()
    {
    var Eingabe, a, b;
    Eingabe=prompt ("Suchtext", "");
    if (Eingabe != "")
      {
       var Treffer = 0;
       for (a=0; a<db.length; a++)
        {
         if (db[a][0] == Eingabe) // Wenn gefunden
          {
           for (b=1; b<db[a].length; b++) // Für alle Spalten von "db"
            {
             if (db[a][b] != "") // Wenn Spalte nicht leer
              {
               HtmlLink = "<a href='" + index[db[a][b]] + ".htm'>" + index[db[a][b]] + ".htm</a><br>";
               Treffer++;
              }
            }
          }
       document.open ();
       document.writeln ("<html><head></head><body><h1>Suchergebnis für '" + Eingabe + "'</h1>");
       Eingabe=Eingabe.toLowerCase(); // Umwandlung in Kleinschreibung
       document.writeln HtmlLink;
       document.writeln ("<h3>" + Treffer + " Suchtreffer</h3>");
       document.writeln ("</body></html>");
       document.close ();
      }
    }

    Vielleicht hilft Dir das ja weiter...

    Grüße,

    Utz

    1. Hi Peter,

      ein Schuss ins Blaue:
      Die Stelle, an der der Fehler auftritt, ist der erste Aufruf von db nach document.open - vielleicht rechnet Netscape db jetzt dem neu geöffneten Dokument zu, wo's ja nicht definiert ist.

      Es könnte einen Versuch wert sein, diese Schleife aus dem document.open-Bereich rauszunehmen, also etwa so:

      Hallo Utz!
      Der Schuss in's Blaue war ein Treffer. Genau da liegt das Problem.
      Ich hab's ausprobiert und siehe da... Jetzt kennt NS die Variable HtmlLink nach dem document.open nicht.
      Ist das nicht zum Heulen!?
      Jetzt stellt sich also die neue Frage: Wie mache ich NS eine Variable in einem neuen Dokument bekannt?
      Aber auf jeden Fall vielen Dank für den Gedankenblitz!!!!
      Peter

      1. Hi Peter,

        Jetzt stellt sich also die neue Frage: Wie mache ich NS eine Variable in einem neuen Dokument bekannt?

        Die beiden folgenden Standardlinks behandeln zwar nicht genau Dein Problem, aber vielleicht hilft Dir eine der dort beschriebenen Methoden weiter:

        http://www.teamone.de/selfaktuell/artikel/javascript/wertuebergabe/index.htm
        [link.http://www.teamone.de/selfaktuell/artikel/javascript/wertuebergabe-2/index.htm]

        Grüße,

        Utz

      2. Hi Peter,

        speicher doch einfach alles was Du jetzt mit document.write direkt ausgibst in einer Variablen und übergebe diese erst wenn alles verarbeitet ist an einen document.write-Befehl.
        Beispiel:
        x = "";
        x += deine Inhalte der jetzigen document.write-Anweisungen
        nach der Schleife dann
        document.open
        document.write(x)
        document.close

        Gruß
        Günter

  4. wenn du an stelle der If(db[a][0]....
    mal fuer a eine gueltige Zahl einsetzt, funktionierts dann
    auch nicht?

  5. Hallo,

    Ich hab' ein Problem mit Netscape. Folgendes Script läuft unter IE problemlos und führt zu den gewünschten Ergebnissen:

    gibt's dazu eine URL?

    Mit den Beispieldateien kann ich mit Netscape4.7 den "db is not defined"
    Fehler o.ä. Fehler gar nicht reproduzieren.

    Grüsse

    cyx23

  6. Hallo Leute,
    erst mal vielen Dank für Eure Mithilfe. Das finde ich absolut super!
    Ein Gedankenblitz von Utz hat zu Tage gefördert, dass nach einem documen.open der NS offensichtlich keine danach angesprochenen Variablen (mehr) kennt.
    Noch zwei nette Leute haben mir noch zwei Ideen zum Ausprobieren gegeben.
    Sollte ich nicht zu einer Lösung kommen, melde ich mich noch mal
    Auf jeden Fall nochmals: Vielen Dank (oder ist das zu überschwenglich? Bin neu hier ;-)
    Peter

    1. Hi Peter!

      Ein Gedankenblitz von Utz hat zu Tage gefördert, dass nach einem documen.open der NS offensichtlich keine danach angesprochenen Variablen (mehr) kennt.

      Logisch eigentlich, schliesslich oeffnest Du mit document.open() das Dokument neu und loeschst also das alte. Nachdem Dein Funktion abfrage() fertig ist, wirst Du nichtmal die mehr wiederfinden.

      Auf jeden Fall nochmals: Vielen Dank (oder ist das zu überschwenglich? Bin neu hier ;-)

      Noe, das ist sogar erwuenscht.

      SO long

  7. Übrigens: Für alle, die es interessiert die Lösung:
    Man braucht nur die Anweisung 'document.open' wegzulassen und schon funzt es in beiden Browsern.
    Gruß Peter