Claude: Javascript Aufruf in einer mit Document.write erzeugter Seite

Hallo,

Ich bin erst anfänger mit Javascript.
Habe ein kleines Problem.

In meinem Verzeichnis/Homepage habe ich einige hundert HTML Seiten, die jede eine kleine Javascript-Suchfunktion haben (selber zusammengebastelt).

Um die Ergebnisse anzuzeigen, erzeuge ich mit document.write eine neue Seite (bzw überschreibe die vorhandene), die nur die Teile enthält, die der Suche entsprechen. Bis da kein Problem (ausser das es nur mit IE klappt, aber ich kenne die Lösung zu diesem Problem).

Jetzt kommt's:
In der Ergebnis-Seite brauche ich Verweise auf externe .js Dateien.
Beispiel:
.....
document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">');
document.write('<HTML><HEAD>');
document.write('<TITLE>Claude's PC-Tipps DE, Suchergebnis</TITLE>');
document.write('<link rel=stylesheet type="text/css" href="xformate.css">');
document.write('<script type="text/javascript" src="zbroklink.js"></script>');
document.write('<script type="text/javascript" src="zcpct.js"></script>');
document.write('<script type="text/javascript" src="dhtml.js"></script>');
document.write('</HEAD>');
document.write('<BODY>');
document.write("<a href="javascript:history.back()">zur&uuml;ck zur Liste</a><br><p><s>" + meldung);
.....
Dann mit einer Schleife werden die Ergebnisse angezeigt.
Beispiel:
.....
 if(ergzw == suchwortanz) { //wenn ergzw = anzahl der Suchwoerter (bei UND) ... alle wörter gefunden
     document.write(inhalthtml[i]);
.....

Das Problem ist nun, das wenn ich dies auf meinem lokalen Rechner ausführe alles geht. Sobald ich es auf dem Webspace habe, wird eine leere Seite angezeit. Erst wenn ich die 3 Zeilen
.....
document.write('<script type="text/javascript" src="zbroklink.js"></script>');
document.write('<script type="text/javascript" src="zcpct.js"></script>');
document.write('<script type="text/javascript" src="dhtml.js"></script>');
.....
entferne, dann geht es wieder.

Wenn ich den QuellCode der leere Seite anschaue, hört es direkt nach diesen 3 Zeilen auf. Der Rest wird nicht mehr erzeugt.

Zu wissen ist auch, das die gleichen 3 Zeilen auch in der ursprüngliche HTML Seite verweist sind.

Wer sich das anschauen möchte: http://www.cpctipps.de
Die Homepage kommt ganz ohne CGI und Datenbank aus.
Auf der Homepage habe ich jetzt die 3 Zeilen entfernt, damit das Suchergebnis angezeigt wird.
Nur die Links 'Tote Links melden' und 'Tipp per eMail weiterleiten' funktionieren nach der Suche nicht.

Hat jemand eine Idee?? ...bestimmt....
Vielen Dank
Gruss
Claude

mfg
Claude

  1. Hallo

    Das Problem ist nun, das wenn ich dies auf meinem lokalen Rechner ausführe alles geht. Sobald ich es auf dem Webspace habe, wird eine leere Seite angezeit. Erst wenn ich die 3 Zeilen
    .....
    document.write('<script type="text/javascript" src="zbroklink.js"></script>');
    document.write('<script type="text/javascript" src="zcpct.js"></script>');
    document.write('<script type="text/javascript" src="dhtml.js"></script>');

    MudGuard hat das in diesem Archivposting erläutert.

    Freundliche Grüße

    Vinzenz

    1. Hallo

      MudGuard hat das in diesem Archivposting erläutert.

      Vielen Dank für die Antwort, die ich jedoch nicht ganz verstehe: Wenn die ganze Zeile zwischen Hochkommas liegt, muss ich doch nicht einzelne Zeichen maskieren? Oder doch?

      Und warum geht es bei mit lokal?

      Danke für Erläuterung.
      Gruss
      Claude

    2. Hallo,
      Habe es probiert. Der erzeugte QuellCode bricht immer noch ab:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
      <HTML>
      <HEAD>
      <TITLE>Claude's PC-Tipps DE, Suchergebnis</TITLE>
      <link rel=stylesheet type="text/css" href="xformate.css">
      <script type="text/javascript" src="zbroklink.js"></script>
      <script type="text/javascript" src="zcpct.js"></script>

      So sieht jetzt der Code aus:
      document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">');
      document.write('<HTML><HEAD>');
      document.write('<TITLE>Claude's PC-Tipps DE, Suchergebnis</TITLE>');
      document.write('<link rel=stylesheet type="text/css" href="xformate.css">');
      document.write('<script type="text/javascript" src="zbroklink.js"></script>');
      document.write('<script type="text/javascript" src="zcpct.js"></script>');
      document.write('</HEAD>');
      document.write('<BODY>');
      ....

      1. Hi,

        So sieht jetzt der Code aus:
        document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">');
        document.write('<HTML><HEAD>');
        document.write('<TITLE>Claude's PC-Tipps DE, Suchergebnis</TITLE>');
        document.write('<link rel=stylesheet type="text/css" href="xformate.css">');
        document.write('<script type="text/javascript" src="zbroklink.js"></script>');
        document.write('<script type="text/javascript" src="zcpct.js"></script>');
        document.write('</HEAD>');
        document.write('<BODY>');

        Glueckwunsch - von vier Stellen, an denen die Zeichenfolge </ auftritt, hast du es bei exakt der Haelfte geschafft, die Maskierung anzubringen.

        Streng dich an, dann schaffst du's beim Rest vielleicht auch noch ...

        MfG ChrisB

        1. Hi Chris,
          Danke für den Hinweis. Der Rest funktionnierte aber ohne Maskierung. Deshalb habe ich die notwendigkeit nicht gesehen.
          Werde ich gelich testen......

          Danke
          Gruss
          Claude

        2. Hallo Chris,
          Trotz Anstregung klappt es nicht.
          Wenn im ganzen Dokument maskiert werden muss, kann ich das nicht auf einfacher weise, da weiter unten in einer Schleife Elemente mit OuterHTML zurückgegeben werden.

          Wie sieht es mit so einer Lösung aus, die ich am Ende ausführen könnte, wenn das Dokument erzeugt ist:

          var newScriptZeile = document.createElement("script");
          newScriptZeile.type="text/javascript";
          newScriptZeile.src="zbroklink.js";
          document.getElementByTagName("Head")[0].appendChild(newScriptZeile);

          Leider bekomme ich für die letzte Zeile die Fehlermeldung, dass das Objekt dies nicht unterstützt. Geht das wirklich nicht? Oder habe ich ein Fehler drin?

          Vielen Dank

          Gruss
          Claude

          1. Hi,

            document.getElementByTagName("Head")[0].appendChild(newScriptZeile);

            Leider bekomme ich für die letzte Zeile die Fehlermeldung, dass das Objekt dies nicht unterstützt.

            Vermutlich, weil du gar kein Objekt hast - das hast du doch sicher per Kontrollausgabe (von document.getElementByTagName("Head")[0]) ueberprueft?

            Head vs. head koennte den Unterschied machen.

            MfG ChrisB

            1. Hi Chris,

              Danke. Du hast recht! Ich habe zur der Zeit noch gar kein Objekt!
              Die Anweisung
              alert(document.getElementByTagName("HEAD")[0].innertext);
              bringt die gleiche Fehlermeldung (diesmal habe ich auf gross/klein-Schreibung geachtet.

              Vorerst habe ich keine weitere Idee. ;-(

              mfg
              claude

              1. (diesmal habe ich auf gross/klein-Schreibung geachtet.

                Das hast du nicht!

                Struppi.

                1. Hi Struppi,

                  Das hast du nicht!
                  Struppi.

                  An welcher Stelle nicht? In der erzeugten Seite steht HEAD.
                  Daher verstehe ich nicht genau was du meinst.

                  Danke
                  mfg
                  Claude

                  1. Das hast du nicht!
                    Struppi.
                    An welcher Stelle nicht? In der erzeugten Seite steht HEAD.

                    Sowohl das Attribut als auch die Funktion sind falsch geschrieben. Schau einfach noch mal in selfhtml nach.

                    Struppi.

                    1. Sowohl das Attribut als auch die Funktion sind falsch geschrieben. Schau einfach noch mal in selfhtml nach.
                      Struppi.

                      Danke. Werde ich heute Abend noch mal prüfen und korrigieren

                      mfg
                      Claude

      2. Habe es probiert. Der erzeugte QuellCode bricht immer noch ab:

        Ich hab deinen code auch probiert, er bricht nicht ab

        Struppi.

        1. Hallo Struppi.

          Vielen Dank. Lokal auf meinem Rechner geht es auch. Leider nicht im Internet.

          mfg
          Claude

          1. Vielen Dank. Lokal auf meinem Rechner geht es auch. Leider nicht im Internet.

            Bei mir geht er auch im Internet.

            Struppi.

            1. Bei mir geht er auch im Internet.
              Struppi.

              Hallo Struppi. Mit welchen Browser? Ich benutze IE7

              mfg
              Claude

              1. Bei mir geht er auch im Internet.
                Struppi.
                Hallo Struppi. Mit welchen Browser? Ich benutze IE7

                Das spielt keine Rolle, der code ist ok, für alle Browser. Die Frage ist eher was du unter "geht nicht" verstehst.

                Struppi.

                1. Hallo Struppi,

                  Die Frage ist eher was du unter "geht nicht" verstehst. Struppi.

                  Also, wir sprechen hier eigentlich von 2 Sachen.

                  1. wenn ich mit document.write versuche die js-Datei im Head einzubinden, hört der erzeugte QuellText nach diesen <script></script> Tags auf. Der Rest wie </head><body> usw.... wird gar nicht mehr erzeuzgt. ABER lokal auf meinem Rechner klappt's. Beispiel siehe ganz oben

                  2. als Ersatz Lösung wollte ich die <script></script> Zeilen per DOM im HEAD einfügen. Hier bekomme ich lokal sowie im Internet die Fehlermeldung, dass das Objekt diese Eingeschaft oder Methode nicht unterstützt.

                  mfg
                  Claude

                    1. wenn ich mit document.write versuche die js-Datei im Head einzubinden, hört der erzeugte QuellText nach diesen <script></script> Tags auf. Der Rest wie </head><body> usw.... wird gar nicht mehr erzeuzgt. ABER lokal auf meinem Rechner klappt's. Beispiel siehe ganz oben

                    Davon rede ich, das klappt prima ob Lokal Online oder in welchem Browser. D.h. du machst etwas anderes falsch. Bekommst du eigentlich einen Fehlermeldung

                    1. als Ersatz Lösung wollte ich die <script></script> Zeilen per DOM im HEAD einfügen. Hier bekomme ich lokal sowie im Internet die Fehlermeldung, dass das Objekt diese Eingeschaft oder Methode nicht unterstützt.

                    Mal abgesehne davon dass die Methode nicht empfehlenswert ist, weil nicht alle Browser das JS auch umsetzten, ist die Fehlermeldung schon klar, weil die Funktion nicht so heißt, sie heißt getElementsByTagName

                    Struppi.

                    1. Hi Struppi, vielen Dank
                      OK, getElements ...s... (habe hier das s vergessen, werden ich heute Abend testen.
                      Melde mich wieder heute Abend.

                      Gruss
                      Claude

                    2. Hallo Struppi,

                      Da Lösung 1 bei mir NUR lokal klappt (warum auch immer), habe ich weiter mit Lösung 2 probiert.

                      Dabei habe ich nun folgende Zeilen am Ende der Suchfunktion hinzugefügt:

                      var newScriptZeile = document.createElement("script");
                      newScriptZeile.type="text/javascript";
                      newScriptZeile.src="dhtml.js";
                      document.getElementsByTagName("HEAD")[0].appendChild(newScriptZeile);
                      newScriptZeile.src="zcpct.js";
                      document.getElementsByTagName("HEAD")[0].appendChild(newScriptZeile);
                      newScriptZeile.src="zbroklink.js";
                      document.getElementsByTagName("HEAD")[0].appendChild(newScriptZeile);

                      Hier habe ich 2 neue Probleme (wahrscheinlich habe ich wieder ein Gedanken- oder Tipp-Fehler):
                      a) es wird nur die letzte JS-Datei berücksichtigt (...da denke ich, dass ein Gedankenfehler in den oberen Zeilen sein muss)
                      b) Ganz kommisch: Es geht nur 1 Mal, dann kommt die Fehlermeldung "Objekt erwarten", so wie wenn der Verweis beim 2. Klicken wieder verschwunden wäre.

                      Vielen Dank für eure Hilfe.
                      Gruss
                      Claude

                      1. [latex]Mae  govannen![/latex]

                        var newScriptZeile = document.createElement("script");
                        newScriptZeile.type="text/javascript";
                        newScriptZeile.src="dhtml.js";
                        document.getElementsByTagName("HEAD")[0].appendChild(newScriptZeile);
                        newScriptZeile.src="zcpct.js";
                        document.getElementsByTagName("HEAD")[0].appendChild(newScriptZeile);
                        newScriptZeile.src="zbroklink.js";
                        document.getElementsByTagName("HEAD")[0].appendChild(newScriptZeile);

                        Hier habe ich 2 neue Probleme (wahrscheinlich habe ich wieder ein Gedanken- oder Tipp-Fehler):
                        a) es wird nur die letzte JS-Datei berücksichtigt (...da denke ich, dass ein Gedankenfehler in den oberen Zeilen sein muss)

                        Du hast genau eine Hundehütte und streichst sie erst gelb, dann rot, dann weiß. Selbstverständlich siehst du nichts mehr von gelb und rot, weil du es übermalt hast. Was passiert wohl, wenn du genau einem script-element mehrfach eine neue src zuweist? Genau.

                        Also für jede js-datei ein eigenes Element erzeugen.

                        Cü,

                        Kai

                        --
                        Some things in life are bad, they can really make you mad
                        Other things just make you swear and curse.
                        When you're chewing on life's gristle, don't grumble, give a whistle
                        And this'll help things turn out for the best...
                        ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|]
                        1. Hallo Kai,

                          Also für jede js-datei ein eigenes Element erzeugen.
                          Kai

                          Ja, OK, habe jetzt Zugriff auf Funktionen aus allen 3 Dateien. Vielen Dank.

                          Aber: Der Zugriff funktioniert nur EIN Mal. Beim 2. Mal kommt wieder der Fehler "Objekt erwartet". Was habe ich da falsch gemacht?

                          mfg
                          Claude

                          1. Hallo Kai,

                            Noch ein wichtiger Hinweis: Beim ausführen einer Funktion wird wieder eine neue Seite erzeugt. Wenn ich dann mit History Back zurückkehre, und die Funktion erneut ausführe, dann kommt die Fehlermeldung.

                            Gruss
                            claude

                            1. Hallo,

                              Der Grund dass es nur einmal ging, war definitiv, dass die Seite nochmal überschrieben wurde, und mit history.back zurückgekehrt wurde. Danach waren die Verweise wieder weg.
                              Werde daher die neue Seiten in einem neuen PopUp-Fenster öffnen.
                              Dann bleibt die Seite bestehen, und die Funktionen können weiter verwendet werden.

                              Also, vielen Dank an alle für die Tipps.

                              mfg
                              Claude

  2. Hallo,

    Wäre es vielleicht eine Lösung, die 3 Zeilen mit DOM nachträglich im HEAD einzubauen, nachdem die Seite fertig erzeugt ist?

    Vielen Dank für eure Hilfe
    Gruss
    Claude

    1. Hallo,

      Ist sowas denkbar?

      var newScriptZeile = document.createElement("script");
      newScriptZeile.type="text/javascript";
      newScriptZeile.src="zbroklink.js";
      document.getElementByTagName("Head").appendChild(newScriptZeile);

      Danke
      Gruss
      Claude