Tom: nochmals JS document.writeln

Hatte vor einigen Tagwen folgenden Thread:
http://forum.de.selfhtml.org/archiv/2003/7/53128/
Danke nochmals für die vielen Antworten!

Jou, hab ich jetzt eingebaut, W3-Validator ist zufrieden und in IE5.x und 6.x, Mozilla 1.4 + 1.5a, Opera 7.11, ... wunderschön anzusehen (wie vorher auch).
Nur hab ich mir jetzt mal den Spaß gemacht und mir das Ganze mal wieder mal mit NN 3.04 Gold (laut meinemn Log verwenden das noch manche Leute!!!) und NC 4.75 angesehen.
Resultat: die "Escapten" Tags die ich wie "document.writeln('<p>blabla</p>')" umgeschrieben hab werden nicht dargestellt bzw. ignoriert.
Ich verwende diese Methode um einige Styles umzudefinieren und dem geneigten User mitzuteilen, er solle sich nen neuen Browser zulegen.

Ne Idee wie man alle zufriedenstellen kann (außer zwei separate Stylesheets mit <link rel ....> und @import .... einzubinden)?

Brauche JS ja noch für andere Dinge, z.B. meinen Grafikanzeiger, der eine Grafik Fensterfüllend anzeigt und bei Klick auf richtige Größe zoomt, das geht jetzt nämlich ebenfalls nicht mehr.
Sieht so aus:

....
<script language="JavaScript">
function vollbild(){
 document.writeln('<div class="obenlinks"><img src="images/xy.gif" width="1242" height="1748"></div>');
 }
</script>

</head>

<body>

<script language="JavaScript">
var imgwidth=(document.body.clientWidth);
var imgheight=Math.round(imgwidth/1242*1748);
document.writeln('<div class="obenlinks"><a href="#" onclick="vollbild();"><img src="images/xy.gif" width="',imgwidth,'" height="',imgheight,'" alt="für volle Auflösung bitte anklicken"></a></div>');
</script>
<noscript><img src="images/xy.gif" width="1242" height="1784"></noscript>
....

Bin langsam echt mit meinem Rat am Ende, vor allem die Fehlerbehandlungen für die alten Netscapes sind recht mühsam.
Kann mir jemand weiterhelfen?

  1. mit NN 3.04 Gold [..] und NC 4.75 angesehen.
    Resultat: die "Escapten" Tags die ich wie "document.writeln('<p>blabla</p>')" umgeschrieben hab werden nicht dargestellt bzw. ignoriert.

    Probiere es mal mit

    "<p>blabla<"+"/p>"

    Ich verwende diese Methode um einige Styles umzudefinieren und dem geneigten User mitzuteilen, er solle sich nen neuen Browser zulegen.

    Benutze dazu wirklich besser eine Hinweisgrafik, die mittels einem per @import importierten

    img.browserhinweis {display:none}

    von neuen Browsern nicht angezeigt wird. Javascript muß nicht jeder eingeschaltet haben, @import wird von den alten Netscapes aber unter Garantie ignoriert.

    Gruß,
      soenk.e

    1. "<p>blabla<"+"/p>"

      Danke für den Tipp, werd es versuchen

      Benutze dazu wirklich besser eine Hinweisgrafik, die mittels einem per @import importierten

      img.browserhinweis {display:none}

      daran habe ich auch gedachr, wollte mit nur die Wartung von zwei CSS-Dateien ersparen :-)

      THX
      Tom

      1. Moin Moin !

        daran habe ich auch gedachr, wollte mit nur die Wartung von zwei CSS-Dateien ersparen :-)

        Spricht etwas dagegen, serverseitig oder auf dem Entwicklungsrechner die eine CSS-Datei aus der anderen zu erstellen?

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
        1. Spricht etwas dagegen, serverseitig oder auf dem Entwicklungsrechner die eine CSS-Datei aus der anderen zu erstellen?

          hmmmm
          gute Frage
          Also serverseitig denke ich mal wird nichts daraus, soll auf einem Memberwebspace der kein SSI, PHP, CGI, .... unterstützt laufen.
          Oder geht das anders ?
          Und wie kann man das auf dem Entwicklungsrechner machen, ohne jedes mal Zeilen hin-und herschaufeln zu müssen ?

          Gruß & THX
          Tom

          1. Moin Moin !

            Spricht etwas dagegen, serverseitig oder auf dem Entwicklungsrechner die eine CSS-Datei aus der anderen zu erstellen?

            hmmmm
            gute Frage
            Also serverseitig denke ich mal wird nichts daraus, soll auf einem Memberwebspace der kein SSI, PHP, CGI, .... unterstützt laufen.

            Bleibt nur der Entwicklungsrechner.

            Oder geht das anders ?
            Und wie kann man das auf dem Entwicklungsrechner machen, ohne jedes mal Zeilen hin-und herschaufeln zu müssen ?

            make kann abhängig vom Änderungsdatum von Quell- und Zieldateien veranlassen, daß eine Zieldatei neu erstellt wird.

            Ein Programm, z.B. ein Script in AWK, sed oder Perl, kann anhand von Regular Expressions oder anderer Merkmale aus einer Textdatei eine andere erzeugen.

            Ich würde mit make, Perl und einem Makefile (ganz gewöhnliche Text-Datei mit Regeln in einem für Make verständlichen Format) aus einer Master-Datei zwei (wahrscheinlich sehr ähnliche) CSS-Dateien erzeugen.

            Die Master-Datei editierst Du, dann einmal make aufrufen, und fertig sind beide CSS-Dateien.

            Du kannst natürlich auch einfach "stumpf und dumm" immer ein Programm laufen lassen. Das kannst Du auch in VB, C, Pascal oder jeder anderen Sprache schreiben, die Dir liegt.

            Make hat den Vorteil, daß -- wenn man es konsequent einsetzt -- ein make genügt, um alle für eine Web-Präsenz notwendigen Dateien *bei Bedarf* neu zu erstellen und *bei Bedarf* auch gleich hochzuladen. Prinzipiell kann man damit sogar virtual hosts gleichzeitig dem Web- und dem Nameserver mitteilen. (Das würde ich aber nur auf Unix-Systemen machen, die Windows-Shell schafft das IMHO wenn überhaupt nur mit viel unnötiger Arbeit.)

            Alexander

            --
            Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
            1. Bleibt nur der Entwicklungsrechner.
              make kann abhängig vom Änderungsdatum von Quell- und Zieldateien veranlassen, daß eine Zieldatei neu erstellt wird.

              Ein Programm, z.B. ein Script in AWK, sed oder Perl, kann anhand von Regular Expressions oder anderer Merkmale aus einer Textdatei eine andere erzeugen.

              Ich würde mit make, Perl und einem Makefile (ganz gewöhnliche Text-Datei mit Regeln in einem für Make verständlichen Format) aus einer Master-Datei zwei (wahrscheinlich sehr ähnliche) CSS-Dateien erzeugen.

              Die Master-Datei editierst Du, dann einmal make aufrufen, und fertig sind beide CSS-Dateien.

              Du kannst natürlich auch einfach "stumpf und dumm" immer ein Programm laufen lassen. Das kannst Du auch in VB, C, Pascal oder jeder anderen Sprache schreiben, die Dir liegt.

              Make hat den Vorteil, daß -- wenn man es konsequent einsetzt -- ein make genügt, um alle für eine Web-Präsenz notwendigen Dateien *bei Bedarf* neu zu erstellen und *bei Bedarf* auch gleich hochzuladen. Prinzipiell kann man damit sogar virtual hosts gleichzeitig dem Web- und dem Nameserver mitteilen. (Das würde ich aber nur auf Unix-Systemen machen, die Windows-Shell schafft das IMHO wenn überhaupt nur mit viel unnötiger Arbeit.)

              Alexander

              Puh, bin zwar als Programmierer nicht ganz daneben (bssi Webseiten, von der Schule her Pascal und jetzt Assembler und C), denke aber das wird doch ein wenig kompliziert, vor allem zu langwierig für die Aufgabe.
              Ich dachte, da gibt es schon fertige Lösungen.
              Die CSS für die Site hat ja nur knapp 5kB und sooo oft wird die auch nicht geändert.
              Denke mal, ich werd die paar Unterschiede zwischen NN4 und modernen Browsern gut kommentieren und das so lösen.
              Aber vielen Dank für die Erläuterungen!

              Für das andere Problem mit der Grafikanzeige hatteich schon vor langer Zeit eine lösung gehabt:
              scrre.innerwidth heisst es, das gibt es schon bei NN4.
              Davon mal so 10pixel abgezogen für den Rand, weil Sidebar gibt es ja keine sollte ausreichen.
              Und für die falche Darstellung der Tabelle die durch Script formatiert wurde gibt es auch eine sehr triviale Lösung.
              Der Javascript-Interpreter meint dazu:

              syntax error.

              -->
              ..^

              Das Auskommentierungszeichen mit "//-->" geschrieben und schon funktioniert das wieder und auch das mit dem z.B. </p> ist kein Problem mehr.

              Nochmals Vielen Dank für Deine Hilfe

              Gruß
              Thomas

              1. Moin Moin !

                Full Quote - nicht gut.

                Puh, bin zwar als Programmierer nicht ganz daneben (bssi Webseiten, von der Schule her Pascal und jetzt Assembler und C),

                Wenn Du C kennst, kennst Du auch den Preprozessor:

                #ifdef URALT
                h1: { color:red; }
                #else
                h1: { color:green; }
                #endif

                Das jagst Du zweimal durch den C-Preprozessor, und Du hast deine zwei CSS-Dateien:

                cpp style.css.in modern.css
                  cpp -DURALT style.css.in antik.css

                Kleine Falle: # wird in CSS und C-Preprozessor leicht unterschiedlich benutzt, da ist ein klein wenig Trickserei nötig.

                cpp mußt Du auf Windows-Systemen evtl. gegen ein anderes Programm austauschen, manchmal macht das auch die EXE-Datei, in der auch der C-Compiler steckt. => Manual lesen

                Für das andere Problem mit der Grafikanzeige hatteich schon vor langer Zeit eine lösung gehabt:
                scrre.innerwidth heisst es, das gibt es schon bei NN4.
                Davon mal so 10pixel abgezogen für den Rand, weil Sidebar gibt es ja keine sollte ausreichen.

                if (document.body) {
                  /* nutze document.body */
                } else {
                  /* nutze screen.innerWidth - 10 */
                }

                Der Javascript-Interpreter meint dazu:
                syntax error.
                -->
                ..^

                Mit Recht.

                Alexander

                --
                Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
                Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
                1. Wenn Du C kennst, kennst Du auch den Preprozessor:

                  #ifdef URALT
                  h1: { color:red; }
                  #else
                  h1: { color:green; }
                  #endif

                  ahja, sowas hab ich schon mal gesehen :-)
                  C programmier ich nur auf Microcontrollern, nix PC.
                  Am PC ken ich nur Pascal
                  und make machen die Entwicklungsumgebungen üblicherweise eh selbst

                  if (document.body) {
                   var imgwidth=document.body.clientWidth;
                   }
                   else {
                   var imgwidth=(screen.availWidth-10);
                   }
                  jo, das funzt :-))))))

                  Big THX
                  Tom

                  1. Moin Moin !

                    Wenn Du C kennst, kennst Du auch den Preprozessor:

                    #ifdef URALT
                    h1: { color:red; }
                    #else
                    h1: { color:green; }
                    #endif

                    ahja, sowas hab ich schon mal gesehen :-)
                    C programmier ich nur auf Microcontrollern, nix PC.

                    Na und? CPP ist CPP. Und auch der CPP für uCs sollte zumindest if-then-else können.

                    Spiel mal etwas mit dem CPP rum, und wenn's nur zum lernen ist. Der GNU-CPP könnte auch noch die Optionen -C und -P brauchen, wenn Du keinen C-Code durchjagst.

                    Am PC ken ich nur Pascal
                    und make machen die Entwicklungsumgebungen üblicherweise eh selbst

                    Unter Unix ist make Deine Entwicklungsumgebung. ;-)

                    Ich brenne meine CDs auch mit make ...

                    if (document.body) {
                     var imgwidth=document.body.clientWidth;
                     }
                     else {
                     var imgwidth=(screen.availWidth-10);
                     }
                    jo, das funzt :-))))))

                    Nur so lange Du imgwidth nicht außerhalb des IF-Blocks brauchst, sonst mußt Du var imgwith; voranstellen und das var aus IF- und ELSE-Block entfernen.

                    Alexander

                    --
                    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
                    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
                    1. Moin!

                      Spiel mal etwas mit dem CPP rum, und wenn's nur zum lernen ist. Der GNU-CPP könnte auch noch die Optionen -C und -P brauchen, wenn Du keinen C-Code durchjagst.

                      Gnu CPP ? Nur unter Unixen oder auch nter Windoof ?

                      Unter Unix ist make Deine Entwicklungsumgebung. ;-)

                      Ich hab meine Unixausflüge wieder aufgegeben.
                      Nachdem KDE ca. 3x langsamer ist als die Windows GUI und ich immer 5 Min gebraucht hab bis das System meinen 2. SCSI-Controller + Scanner und externes CDROM gefunden hat hab ich es aufgegeben, ich will arbeiten und nicht konfigurieren.

                      Nur so lange Du imgwidth nicht außerhalb des IF-Blocks brauchst, sonst mußt Du var imgwith; voranstellen und das var aus IF- und ELSE-Block entfernen.

                      Dachte ich auch zuerst, brauch ich eh später um die Auflösung zu berechnen und den <img ..> Tag zu schreiben.
                      Funzt aber mit allen Browsern.

                      Greez
                      Tom

                      1. Moin Moin !

                        Moin!

                        Spiel mal etwas mit dem CPP rum, und wenn's nur zum lernen ist. Der GNU-CPP könnte auch noch die Optionen -C und -P brauchen, wenn Du keinen C-Code durchjagst.

                        Gnu CPP ? Nur unter Unixen oder auch nter Windoof ?

                        Hauptsächlich unter Unixen. Wenn Du Dir Cygwin (http://www.cygwin.com/) zulegst, auch unter Windoof.
                        Borland hat mal die Kommandozeilentools von BCC 5.5 gratis veröffentlicht, da ist neben einem C/C++-Compiler und Windows-Headern auch ein CPP bei (cpp32.exe). Der hat allerdings eine andere Aufrufsyntax als der GNU CPP.

                        Unter Unix ist make Deine Entwicklungsumgebung. ;-)

                        Ich hab meine Unixausflüge wieder aufgegeben.
                        Nachdem KDE ca. 3x langsamer ist als die Windows GUI und ich immer 5 Min gebraucht hab bis das System meinen 2. SCSI-Controller + Scanner und externes CDROM gefunden hat hab ich es aufgegeben, ich will arbeiten und nicht konfigurieren.

                        Mit was für einer kaputten Distribution hast Du denn getestet?

                        Nur so lange Du imgwidth nicht außerhalb des IF-Blocks brauchst, sonst mußt Du var imgwith; voranstellen und das var aus IF- und ELSE-Block entfernen.

                        Dachte ich auch zuerst, brauch ich eh später um die Auflösung zu berechnen und den <img ..> Tag zu schreiben.
                        Funzt aber mit allen Browsern.

                        Glaube ich nicht. Es funktioniert vielleicht mit den paar Browsern, mit denen Du getestet hast. Nimm das var aus dem if raus und setzte es davor, das ist weniger redundant und weniger fehleranfällig.

                        Alexander

                        --
                        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
                        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
                        1. Hauptsächlich unter Unixen. Wenn Du Dir Cygwin (http://www.cygwin.com/) zulegst, auch unter Windoof.

                          Das hab ich schon mal geladen um Mozilla zu compilieren, werds wamit versuchen

                          Mit was für einer kaputten Distribution hast Du denn getestet?

                          Mandrake 8.2

                          Glaube ich nicht. Es funktioniert vielleicht mit den paar Browsern, mit denen Du getestet hast. Nimm das var aus dem if raus und setzte es davor, das ist weniger redundant und weniger fehleranfällig.

                          Werd ich ändern, danke für den Hinweis !

                          Schönen Tag noch
                          Tom

      2. Benutze dazu wirklich besser eine Hinweisgrafik, die mittels einem per @import importierten

        img.browserhinweis {display:none}
        daran habe ich auch gedachr, wollte mit nur die Wartung von zwei CSS-Dateien ersparen :-)

        Eine Datei mit nur einer Zeile (der oben genannten) erfordert nicht wirklich viel Wartung.

        Gruß,
          soenk.e

        1. stimmt :-)
          ned wirklich.
          Ist einen Versuch wert.

    2. hi,

      von neuen Browsern nicht angezeigt wird. Javascript muß nicht jeder eingeschaltet haben, @import wird von den alten Netscapes aber unter Garantie ignoriert.

      soweit ich weiss, kann man css und javascript in den netscape-versionen <= 4 doch sowieso nur zusammen an- oder abschalten, aber nicht einzeln (da ns4 kein css, sondern seine eigene auf javascript aufbauende variante jsss verwendet hat ...).

      gruss,
      wahsaga

  2. Moin Moin !

    Hatte vor einigen Tagwen folgenden Thread:
    http://forum.de.selfhtml.org/archiv/2003/7/53128/

    Du hast < und > vergessen.

    Nur hab ich mir jetzt mal den Spaß gemacht und mir das Ganze mal wieder mal mit NN 3.04 Gold (laut meinemn Log verwenden das noch manche Leute!!!) und NC 4.75 angesehen.

    NN3? Lange nicht mehr benutzt ...
    Kann/konnte der denn schon CSS?

    Resultat: die "Escapten" Tags die ich wie "document.writeln('<p>blabla</p>')" umgeschrieben hab werden nicht dargestellt bzw. ignoriert.

    Das klingt nach Javascript-Fehlern.
    Der NN hat mindestens seit Version 4 eine Javascript-Konsole, nutze sie: Ctrl-O "javascript:" ENTER
    Mozilla kann das auch (und es gibt auch noch einen "richtigen" JS-Debugger).

    Ich verwende diese Methode um einige Styles umzudefinieren und dem geneigten User mitzuteilen, er solle sich nen neuen Browser zulegen.

    Ne Idee wie man alle zufriedenstellen kann (außer zwei separate Stylesheets mit <link rel ....> und @import .... einzubinden)?

    Brauche JS ja noch für andere Dinge, z.B. meinen Grafikanzeiger, der eine Grafik Fensterfüllend anzeigt und bei Klick auf richtige Größe zoomt, das geht jetzt nämlich ebenfalls nicht mehr.

    Schau mal in die JS-Objekt-Referenz (und http://devedge.netscape.com/), ab welcher Netscape-Version die von dir benutzten JS-Objekte implementiert sind.

    document.writeln('<div class="obenlinks"><img src="images/xy.gif" width="1242" height="1748"></div>');

    Das ist vielleicht größer als so mancher Desktop, aber noch lange nicht formatfüllend. ;-)

    <script language="JavaScript">

    type-Attribut fehlt.

    var imgwidth=(document.body.clientWidth);

    Kennt NN3/4 das Objekt document.body?
    Wozu die Klammern?

    var imgheight=Math.round(imgwidth/1242*1748);
    document.writeln('<div class="obenlinks"><a href="#" onclick="vollbild();"><img src="images/xy.gif" width="',imgwidth,'" height="',imgheight,'" alt="für volle Auflösung bitte anklicken"></a></div>');
    </script>
    <noscript><img src="images/xy.gif" width="1242" height="1784"></noscript>

    Warum nimmst Du nicht einfach ein Thumbnail und sparst beim Laden der Seite die Bandbreite für das Monsterbild?

    Bin langsam echt mit meinem Rat am Ende, vor allem die Fehlerbehandlungen für die alten Netscapes sind recht mühsam.

    Kann mir jemand weiterhelfen?

    RTFM, RTFM, RTFM.

    Und versuche, so weit es geht ohne Javascript und Browserspezialitäten auszukommen.

    Special Effekts und alte Browser passen nun einmal nicht zusammen. Die alten Browser sind für das gebaut, wofür HTML ursprünglich vorgesehen war: Verlinken von Text, mit ein paar Textformatierungen. Pixelgenaue Browservergewaltigung überleben nur moderne Browser.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. Mal Danke für Deine Antworten!

      Kann/konnte der denn schon CSS?

      Nee, aber zumindest das darstellen, was ich definiert hab (hab vorher schon ein wenig mit NN4 und Mosaic 2.1 (*g*) getestet.

      Das klingt nach Javascript-Fehlern.
      Der NN hat mindestens seit Version 4 eine Javascript-Konsole, nutze sie: Ctrl-O "javascript:" ENTER

      Jo :-)
      document.body has no properties.
      spricht er.
      Hab ich ganz vergessen, dass es das gibt. Nachdem die ewigen Browserhänger von NN4 seit Mozilla (der seit 0.96 richtig benutzbar ist) ein Ende haben musste ich das nie mehr benutzen :-)

      Schau mal in die JS-Objekt-Referenz (und http://devedge.netscape.com/), ab welcher Netscape-Version die von dir benutzten JS-Objekte implementiert sind.

      werd ich mal gucken....

      Warum nimmst Du nicht einfach ein Thumbnail und sparst beim Laden der Seite die Bandbreite für das Monsterbild?

      Ich hab eine ewige Liste mit Dokumenten zum ansehen (meistens einzelne Seiten), alle als Acobat PDF und GIF (ein Monterbild hat da im Schnitt 25kB, weniger als manche Seite) und von dort aus kann man sich die einzelnen Docs ansehen. Da ich auch das Acrobat-Plugin nicht zwingend voraussetzen möchte, hab ich eben mit GIFs und JS so eine Art Dokumentenbreitenanzeige (wie in Acrobat) mit Zoomfunktion nachbilden wollen.

      RTFM, RTFM, RTFM.

      ?????? - nix verstehn

      Und versuche, so weit es geht ohne Javascript und Browserspezialitäten auszukommen.

      Tu ich eh, ich finde nur CSS formatierte Tabellen (mit benutzerspezifischen Rahmen) und vor allem Formulare mit genau definierten Breiten viel schöner und effizienter als eine gif-Hintergrundgrafik o.Ä. - NN4 hat mich eh schon dazu gezwungen, ein irrwitziges Konstrukt aus Tabellen einzubauen, weil er CSS formatierte <input>-Felder die in einer Zelle nebeneinander stehen immer umbrechen will, also noch mal was reinverschachtelt :-).
      Und JS hab ich für das Schreiben eines Hinweises und für die Grafikanzeige verwendet, ist aber natürlich auch alles ohne JS benutzbar und mit NN 4.75, Mozilla 1.02+1.4, IE 5.01+5.5SP1+6.0SP1, Konqueror (KDE2.2+3.0), Opera 3.8+5.11+7.11, Mosaic 2.1, Lynx getestet.

      Gruß und Danke !
      Tom