Christoph Schnauß: Denkfehler?

guten Abend, Forum ;-)

Ich habe heute nachmittag eine Stunde damit verplempert, über folgendes Konstrukt nachzudenken:

document.write('<div ID="layer1">');
document.write('<!--#include file="datei.txt" -->');
document.write('</div>');

Das will einfach nicht funktionieren, während

<div ID="layer1">
<!--#include file="datei.txt" -->
</div>

im HTML-Code völlig prblemlos funktioniert.

Ich erkläre es mir so: SSI ist eine serverseitige Technologie, und Javascript funktioniert clientseitig. Auf dem Client kann ich natürlich (?) keine Anweisungen ausführen, die nur der Server befolgen kann. Stimmt das?

Hintergrund: ich baue an einer Intranet-Konstruktion. Natürlich gibt es einen lokalen Server, der auch SSI durchaus kann. Im lokalen Netz stecken knapp 50 Rechner, die bei Bedarf die interne Homepage aufrufen sollen. Die hat dann eine auf Javascript aufgebaute Navigation, mit der einige Inhalte "dynamisch" erzeugt und je nach interner IP unterschiedlich geschrieben werden sollen.
Javascript ist auf allen Rechnern/Browsern im lokalen Netz erlaubt.

Ich will SSI einsetzen, weil in ein paar DIV's bei Bedarf ziemlich große Dateien eingebunden werden müssen.

BTW: im lokalen Netz ist es nicht so wichtig, valide Seiten zu bauen. Trotzdem achte ich darauf  -  ist schließlich eine Sache der Ehre *g*. So, und nun meckert der Validator, wenn ich bloß
<script language="javascript">
angebe. er will unbedingt
<script type="text/javascript">
haben. Wie sinnvoll ist es, einfach beide Angaben zu vereinigen, und dann eben
<script type="text/javascript" language="javascript">
zu schreiben?

Grüße aus Berlin

Christoph S.

  1. guten Abend, Forum ;-)

    Ich habe heute nachmittag eine Stunde damit verplempert, über folgendes Konstrukt nachzudenken:

    document.write('<div ID="layer1">');
    document.write('<!--#include file="datei.txt" -->');
    document.write('</div>');

    Das will einfach nicht funktionieren, während

    <div ID="layer1">
    <!--#include file="datei.txt" -->
    </div>

    im HTML-Code völlig prblemlos funktioniert.

    Ich erkläre es mir so: SSI ist eine serverseitige Technologie, und Javascript funktioniert clientseitig. Auf dem Client kann ich natürlich (?) keine Anweisungen ausführen, die nur der Server befolgen kann. Stimmt das?

    Ne. Einfacher. Der Browser bekommt das was der Server schickt. Und der schickt eben den Code ganz oben mit dem Wortlaut der Datei datei.txt ersetzt. Wenn das Skript mit dem Browser funktionieren soll, dann darf in der Datei dati.txt kein Zeilenumbruch und keine Anführungszeichen vorkommen. Vielleicht ist das das Problem. Rufe einfach mal die Seite mit der obigen Version auf und schau Dir das JS an.

    1. hi,

      Ich erkläre es mir so: SSI ist eine serverseitige Technologie, und Javascript funktioniert clientseitig. Auf dem Client kann ich natürlich (?) keine Anweisungen ausführen, die nur der Server befolgen kann. Stimmt das?
      Ne. Einfacher. Der Browser bekommt das was der Server schickt.

      Natürlich. Das steht auch nicht in Frage.

      Und der schickt eben den Code ganz oben mit dem Wortlaut der Datei datei.txt ersetzt.

      ? Wie meinst du das?

      Wenn das Skript mit dem Browser funktionieren soll, dann darf in der Datei dati.txt kein Zeilenumbruch und keine Anführungszeichen vorkommen.

      Zeilenumbrüche dürfen sehr wohl vorkommen, wenn sie entweder Unicode sind oder maskiert werden. Auch Anführungszeichen sind überhaupt kein Problem. Das Problem ist, daß "datei.txt" nach wie vor auf dem Server liegt, aber eine clientseitige Anweisung versucht, sie mit Hilfe einer Servertechnologie aufzurufen und in den Browser zu laden.

      Grüße aus Berlin

      Christoph S.

      1. aber eine clientseitige Anweisung versucht, sie mit Hilfe einer Servertechnologie aufzurufen und in den Browser zu laden.

        Denkfehler?
        Denkfehler!

        Salokin

  2. Hi,

    document.write('<div ID="layer1">');
    document.write('<!--#include file="datei.txt" -->');

    Wenn datei.txt auch nur ein ' oder einen Zeilenumbruch enthält, ist damit die javascript-Anweisung kaputt.

    document.write('</div>');
    Das will einfach nicht funktionieren, während
    <div ID="layer1">
    <!--#include file="datei.txt" -->

    Hier ist das kein Problem, denn für HTML sind z.B. Zeilenumbrüche vollkommen egal.

    </div>
    im HTML-Code völlig prblemlos funktioniert.

    Ich erkläre es mir so: SSI ist eine serverseitige Technologie, und Javascript funktioniert clientseitig. Auf dem Client kann ich natürlich (?) keine Anweisungen ausführen, die nur der Server befolgen kann. Stimmt das?

    Nein. Beim Client kommt ja die SSI-Anweisung gar nicht mehr an. Wenn die Datei datei.txt
    abc
    enthält, dann kommt beim Client
    document.write('abc');
    an.
    Steht aber
    abc
    def
    in der Datei, kommt
    document.write('abc
    def');
    beim Client an, was kein gültiges Javascript ist (Zeilenumbruch mitten im String).
    Selbiges für
    abc'def
    denn dann kommt
    document.write('abc'def');
    an, was auch nicht richtig ist (def' steht nach dem String).

    Guck einfach mal in den Quelltext, der beim Browser ankommt.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. hallo Andreas,

      Ich erkläre es mir so: SSI ist eine serverseitige Technologie, und Javascript funktioniert clientseitig. Auf dem Client kann ich natürlich (?) keine Anweisungen ausführen, die nur der Server befolgen kann. Stimmt das?
      Nein. Beim Client kommt ja die SSI-Anweisung gar nicht mehr an.

      Hm. Stimmt.

      Guck einfach mal in den Quelltext, der beim Browser ankommt.

      Das war ja der Grund, weshalb ich diesen kleinen Thread angefangen habe. Es ist nämlich alles "richtig" angekommen

      Grüße aus Berlin

      Christoph S.

  3. Hi!

    BTW: im lokalen Netz ist es nicht so wichtig, valide Seiten zu bauen. Trotzdem achte ich darauf  -  ist schließlich eine Sache der Ehre *g*. So, und nun meckert der Validator, wenn ich bloß
    <script language="javascript">
    angebe. er will unbedingt
    <script type="text/javascript">
    haben. Wie sinnvoll ist es, einfach beide Angaben zu vereinigen, und dann eben
    <script type="text/javascript" language="javascript">

    lanaguage="javascript" ist nur bei Angabe der Javascriptversion sinnvoll, und auch nur dann wenn man Code entsprechend der Fähigkeiten alter Browser separieren will:

    <script language="javascript1.0">
    code für Netscape2|IE3
    </script>
    <script language="javascript1.1">
    code für Netscape3
    </script>
    <script language="javascript1.2">
    code für Netscape4|IE4
    </script>

    etc. http://www.jellspace.net/javascript/ref/jsversioncomp.html

    Das weglassen von type="text/javascript" oder verändern des MIME-Typs kann in Mozilla im Standards-Mode dazu führen, das das Javascript nicht ausgeführt wird, genauso wie das weglassen von type="text/css" dazu führt, das der Mozilla die Formatierung mit CSS verweigert.

    Eigentlich kann man, wenn man nicht auf die alten Browser angewiesen ist, das language-Attribut weglassen (aber man kann ja auch mit Javascript auf Features prüfen), das type-Attribut sollte auf jeden Fall mit dem richtigen Wert gesetzt werden.

    Gruß Herbalizer