CSSler: CSS-Sheet ändern für javascript:print(); - klappt nicht!

Hallo,

für meine Homepage plane ich zurzeit ein print-Skript einzubauen, dass das verwendete Stylesheet umformatiert, sodass weniger Grafiken verwendet werden und alles in schwarz weiß ist (außer der Bilder im Text).

Ich weiß zwar, dass man auch ein print-Stylesheet einbinden kann, aber ich würde es mir wünschen, wenn man vorher das "Ergebnis" sehen kann - wirkt irgendwie besser finde ich.

Meine Javascript-Funktion sieht so aus:

  
function printDocument () {  
  
    DruckFenster = window.open(document.location.href);  
  
    // Nur ein Auszug, in Wirklichkeit natürlich mehr.  
    DruckFenster.document.getElementsByTagName("h1")[0].style.color = "#000000";  
    DruckFenster.document.getElementsByTagName("body")[0].style.background = "#ffffff";  
    DruckFenster.document.getElementsByTagName("body")[0].style.padding = "0";  
  
    DruckFenster.focus();  
    DruckFenster.print();  
  
}  

Aber das funktioniert so nicht. Wenn ich im IE das Script ausführe, erscheint die druckfähige Seite im neuen Fenster, alles wunderbar, und IE fragt mich im neuen Fenster: JavaScipt ausführen? Wenn ich dann ja sage, sieht die Seite wieder aus wie vorher. Warum?

In Opera und FF, die die JS-Abfrage ja nicht haben, sieht das neu geöffnete Fenster sofort wieder so aus wie das Ursprungsfenster.

Kann jemand helfen?

Grüße
CSSler

  1. Hallo CSSler,

    Ich weiß zwar, dass man auch ein print-Stylesheet einbinden kann, aber ich würde es mir wünschen, wenn man vorher das "Ergebnis" sehen kann - wirkt irgendwie besser finde ich.

    Wer braucht denn so etwas? Kennst du die Druckvorschau des Browsers? Die liefert im Zweifel auch ein realitätsgetreueres Bild vom zu erwartenden Ausdruck.

    Gruß Gernot

    1. Wer braucht denn so etwas? Kennst du die Druckvorschau des Browsers? Die liefert im Zweifel auch ein realitätsgetreueres Bild vom zu erwartenden Ausdruck.

      Hallo Gernot,

      das mag sein, das wusste ich nicht. Aber: Warum funktioniert obiges Beispiel nicht?

      Grüße
      CSSler

      1. Nachtrag mit dem kompletten Beispiel:

        http://www.s147626996.online.de/tmp/

        Gruß
        CSSler

        1. Hat jemand eine Idee, warum es nicht funktioniert? Ich bin ganz ratlos.

          1. Hat jemand eine Idee, warum es nicht funktioniert? Ich bin ganz ratlos.

            Mal wieder eine der stumpfesten Antworten, da würde ich zumindest als erstes dran denken, abgesehen davon, dass ich ein solches Script auch nicht gutheiße.

            Denke doch mal an die CSS-Hierachie (! Dein Name spricht nicht für dich !), wenn du ein print-stylesheet hast, dann kannst du den doch einfach in den "normalen" stylesheet kopieren, und vor alle deklarationen ein .print setzen, dann brauchst du im Browser nur noch einen Button, auf den man klicken kann, der dann folgendes js ausführt:

              
            function togglePrintView(){  
            var body = document.getElementsByTagName('body')[0];  
            if(/\bprint\b/gi.test(body.className)  
              body.className = body.className.replace('print','');  
            else  
              body.className += ' print';  
            }  
            
            

            damit du nicht einfach c&p machen kannst habe ich einen kleinen fehler eingebaut!

            mfG Felix Nehrke

            P.S.: Besuche unseren Blog:  http://www.pommes-blog.de

            --
            Manchmal gibs was neues :)
            fo:| ch:| rl:( br:> n4:? ie:( va:) de:> zu:) fl:( ss:| ls:[ js:)
            1. Mal wieder eine der stumpfesten Antworten, da würde ich zumindest als erstes dran denken, abgesehen davon, dass ich ein solches Script auch nicht gutheiße.

              Freundliche Antwort, aber unabhängig von dem Ton danke ich dir für die Idee.

              damit du nicht einfach c&p machen kannst habe ich einen kleinen fehler eingebaut!

              Das ist einfach nur eine Gemeinheit. Warum? Musst du es mir unnötig schwermachen? Ich sitze hier schon seit drei Stunden an dem obigen JavaScript-Vorschlag von mir, der auch erst nach stundenlanger Recherche für mich so halbwegs geklappt hat.

              1. Wen es interessiert, eine funktionierende Möglichkeit nach meiner ursprünglichem Methode ist unter dem gleichen Link zu finden:

                http://www.s147626996.online.de/tmp/

                  
                  
                function printDocument () {  
                  
                    DruckFenster = window.open(document.location.href);  
                    DruckFenster.onload = function(){ change(DruckFenster); };  
                  
                }  
                  
                function change (Fenster) {  
                  
                    // Änderungen in diesem Stil:  
                    Fenster.document.getElementById('Seite').style.background = "#ffffff";  
                  
                }  
                
                
            2. @@nemoinho:

              nuqneH

              var body = document.getElementsByTagName('body')[0];

              Das ist nicht sinnvoll. Das body-Elementobjekt muss nicht erst mühsam aus dem DOM herausgesucht werden, sondern steht mit als Unterobjekt des document-objekts bereits zur Verfügung:

              var body = document.body;

              Oder ganz ohne die Zuweisung und im Folgenden document.body statt body.

              Qapla'

              --
              Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  2. @@CSSler:

    nuqneH

    für meine Homepage plane ich zurzeit ein print-Skript einzubauen, dass das verwendete Stylesheet umformatiert, sodass weniger Grafiken verwendet werden und alles in schwarz weiß ist (außer der Bilder im Text).

    Das ist nicht sinnvoll.

    Womit nicht gemeint ist, einige Bilder nicht mit auszudrucken (das werden doch aber sicher Hintergrundbilder (Verzierung) sein, oder?); sondern, dass du dafür mit JavaScript aufs falsche Pferd setzt.

    Mach deinem Nickname Ehre und entdecke die Möglichkeiten!

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    1. @@Gunnar Bittersmann:

      nuqneH

      für meine Homepage plane ich zurzeit ein print-Skript einzubauen, dass das verwendete Stylesheet umformatiert, sodass weniger Grafiken verwendet werden und alles in schwarz weiß ist (außer der Bilder im Text).

      Oops, du hattest deinen ersten Absatz so formuliert, dass ich keine Veranlassung sah weiterzulesen.

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  3. Hallo,

    kannst Du mal ein Bespiel online zeigen?
    Wann rufst Du das Skript mit den style-Änderungen denn auf - hoffentlich erst, wenn die entsprechenden Elemente bereits existieren?

    Grüße Basti

  4. Aber das funktioniert so nicht.

    Das ist keine Fehlerbeschreibung!
    Wie lautet die Fehlermeldung des Browsers? (Du weißt wo du diese findest?)
    Was hast du getan um diese zu verhindern.

    Struppi.