Teclador: Drucken mit Mozilla

Hallo!

Habe hier ein Problem mit dem Mozilla: Wenn ich Seiten meiner Webseite, z.B. http://www.rv-schaag.de/news.shtml drucken will, druckt der mir Scrollbars (die man in der Druckvorschau auch noch bewegen kann!). Ich habe schon rausgefunden das Javascript alle Sytlesheets verändert (screen, print ...) und bekomme das im IE durch onbeforeprint in den Griff. Nur wie mache ich das für Mozilla?  Bin für jeden Ansatz dankbar...

MfG
Teclador

  1. Hi,

    Habe hier ein Problem mit dem Mozilla: Wenn ich Seiten meiner Webseite, z.B. http://www.rv-schaag.de/news.shtml drucken will, druckt der mir Scrollbars (die man in der Druckvorschau auch noch bewegen kann!).

    definiere ein Druck-Layout, das keine Scrollbars enthält. Javascript ist dafür nicht geeignet.

    http://selfhtml.teamone.de/css/formate/einbinden.htm#media

    LG Roland

    --
    Warum schreibst *DU* keinen Beitrag? Fauler Sack. Konsument!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    1. definiere ein Druck-Layout, das keine Scrollbars enthält. Javascript ist dafür nicht geeignet.

      ich habe via media=print ein eigenes Stylesheet für den Druck eingebunden. (und eins via media=screen für die Bildschirmanzeige) Dumm nur das der Javascript-Befehehl   document.getElementById('layValue').style.overflow ="auto"; IN BEIDEN Stylesheets das ändert, also auch im Druck-Stylesheet

      1. Hi,

        ich habe via media=print ein eigenes Stylesheet für den Druck eingebunden. (und eins via media=screen für die Bildschirmanzeige)

        sehr schön, funktioniert wie gewollt.

        Dumm nur das der Javascript-Befehehl document.getElementById('layValue').style.overflow ="auto"; IN BEIDEN Stylesheets das ändert, also auch im Druck-Stylesheet

        Wo verwendest du das denn? Auf der verlinkten Seite sehe ich es jedenfalls nicht. Ich kann mir nicht so recht vorstellen, dass Javascript in der Druckvorschau aktiv ist... hört sich jedenfalls sehr nach einem Bug an.

        LG Roland

        --
        Warum schreibst *DU* keinen Beitrag? Fauler Sack. Konsument!
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        1. Wo verwendest du das denn? Auf der verlinkten Seite sehe ich es jedenfalls nicht. Ich kann mir nicht so recht vorstellen, dass Javascript in der Druckvorschau aktiv ist... hört sich jedenfalls sehr nach einem Bug an.

          Der Code für dieses Layout selbst steht in der layout.cs:
              SetAutoOverflow('layValue');
          SetAutoOverflow ist eine Funktion aus der wons.cs und die erzeugt dann den Aufruf - habe ihn also gerade nur zusammengefasst.
          Tatsächlich interpretiert der Javaskript beim Drucken. Wenn man Javascript ausschaltet funktioniert es (mal abgesehen was er dann mit den Bildern macht, das ist aber ein anderes Thema). Der IE macht gleiches, nur baue ich die Seite vor und nach dem Ausdruck um. onbeforeprint und onafterprint sind aber MS-eigene Dinger, die auch nur da gehen.

          Eine Idee was ich machen kann? Wie ich nur das Stylesheet für screen ändern kann? *verzweifel*

          1. Hallo,

            Es gibt eine Möglichkeit, nur das Style Sheet für Druckelemente zu ändern.
            Evt. musst Du anstatt des style-Attribut des Elementes direkt den CSS-Block ändern.
            Schau dazu mal beim W3C in der Spezifikation der CSS-DOM nach.
            Einen Link zur entsprechenden Stelle kann ich Dir leider auf die Schnelle nicht bieten.

            Grüße

            Daniel

            1. Evt. musst Du anstatt des style-Attribut des Elementes direkt den CSS-Block ändern.

              document.styleSheets[].item.rule() und dann irgendwas. Hat einer ein einfachen Beispiel? Ich werde aus der DOM nicht schlau und IDL auf Javascript ist umsetzen ist nicht meine Stärke...

          2. Hi,

            SetAutoOverflow ist eine Funktion aus der wons.cs und die erzeugt dann den Aufruf - habe ihn also gerade nur zusammengefasst.

            habe ich gesehen, aber wozu eigentlich dieser Aufwand? Es reicht doch, den Kopfbereich mit position:fixed ruhigzustellen und den Bereich, dem du jetzt per DOM overflow zuweist oben mit einem Außenabstand zu versehen. Dass Opera 7 overflow:scroll beherrscht, ist dir bekannt? position:fixed ist ein besserer "Frame-Ersatz".

            Tatsächlich interpretiert der Javaskript beim Drucken.

            Das ist IMHO ein gewaltiger Bug, hilft dir nur nichts...

            Wenn man Javascript ausschaltet funktioniert es (mal abgesehen was er dann mit den Bildern macht, das ist aber ein anderes Thema). Der IE macht gleiches, nur baue ich die Seite vor und nach dem Ausdruck um. onbeforeprint und onafterprint sind aber MS-eigene Dinger, die auch nur da gehen.

            Eine Idee was ich machen kann? Wie ich nur das Stylesheet für screen ändern kann? *verzweifel*

            Du könntest die Änderung von overflow an die Sichtbarkeit anderer DIVs binden, d.h. die Eigenschaft nur ändern, wenn der Kopfbereich sichtbar ist. Molily experimentiert im Moment mit etwas Ähnlichem, vielleicht siehst du dir mal [pref:t=31057&m=167742] ff. an. Wenn Mozilla im Drucklayout DOM verarbeitet, sollte das möglich sein.

            LG Roland

            --
            Warum schreibst *DU* keinen Beitrag? Fauler Sack. Konsument!
            http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
            1. Dass Opera 7 overflow:scroll beherrscht, ist dir bekannt?

              Nein, bis gerade nicht.

              position:fixed ist ein besserer "Frame-Ersatz".

              Da der IE das nicht kann, scheidet es leider aus. Und gemessen habe ich >95% IE-Benutzer. Leider.

              Du könntest die Änderung von overflow an die Sichtbarkeit anderer DIVs binden, d.h. die Eigenschaft nur ändern, wenn der Kopfbereich sichtbar ist. Molily experimentiert im Moment mit etwas Ähnlichem, vielleicht siehst du dir mal [pref:t=31057&m=167742] ff. an. Wenn Mozilla im Drucklayout DOM verarbeitet, sollte das möglich sein.

              Wäre eine Idee. Nur scheint es so als würde er beim Drucken den aktuellen, durch JS veränderten Status verwenden. Kann ich irgendein Event abfangen wenn mein Style verändert wird?

          3. Hallo Teclador,

            Eine Idee was ich machen kann? Wie ich nur das Stylesheet für screen ändern kann? *verzweifel*

            Nur mal so eine Schnapsidee: Du könntest in media="print" ja eine zusätzliche Klasse definieren wie z.B.

            .scrolldivs { overflow: irgendwasaußerscroll !important; }

            und dem <div> dann auch noch diese Klasse zuweisen. Wenn Deine JS-Funktion greift, könnte es sein, das diese dann am !important scheitert... (zu faul, es zu testen, daher keine Ahnung, ob es klappt)

            Grüße,

            Christian

            --
            Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                                  -- Albert Einstein
      2. Hallo Teclador!

        ich habe via media=print ein eigenes Stylesheet für den Druck eingebunden. (und eins via media=screen für die Bildschirmanzeige) Dumm nur das der Javascript-Befehehl

        document.getElementById('layValue').style.overflow ="auto"; IN BEIDEN Stylesheets das ändert, also auch im Druck-Stylesheet

        Damit er beim Druck nicht auch das Overflow ändert mußt Du folgendes machen...

        1. Definiere in Deinem "media=screen"-Stylesheet zwei verschiedene Klassen. Einmal eine mit der Eigenschaft overflow:auto; und ein mal mit der Eigenschaft overflow:visible;
        Z.B. so:
         .showoverflow {
           overflow:visible;
         }

        .scrolloverflow {
           overflow:auto;
         }

        2. In Deinem Javascript änderst Du jetzt für Dein "layValue" nicht mehr direkt das Style-Objekt sondern tauscht bei bedarf die ganze Klasse aus. Also...
          document.getElementById('layValue').className = "scrolloverflow";

        Oder wenn Du ihn später wieder zurück setzen willst dann hallt "showoverflow" als Wert.

        Da Du die Klasse(n) so nur im "media=screen" Stylesheet definiert hast, wirkt es sich auch nicht auf die Druckausgabe aus wenn Du sie änderst.

        Gruß,
        Sönke