Christoph: Javascript beim Drucken deaktivieren?

Hallo!

Ich benutze zur sauberen Darstellung von (teil-)transparenten .PNG-Dateien eine externe Javascript-Datei, damit der Internet Explorer diese auch richtig darstellt (Firefox tut es ja auch ohne Hilfe).
Die Datei mit dem Javascript-Code habe ich von hier: http://homepage.ntlworld.com/bobosola.
Bis hierhin funktioniert auch alles super.
Das einzige Problem ist, dass, wenn ich die Seite nun ausdrucken möchte, der Explorer die Grafiken nicht bzw. noch "fälscherer" darstellt.
Gibt es eine Möglichkeit, den Aufruf der Javascript-Datei für's Drucken zu verhindern? Bspw. über verschiedene CSS? Ich benutze hier auch zwei CSS. Eine für "screen" und eine für "print".

Vielen Dank!

  1. Hallo,

    Gibt es eine Möglichkeit, den Aufruf der Javascript-Datei für's Drucken zu verhindern?

    Dein JavaScripte wird wohl beim Aufrufen eines Dokuments ausgeführt und wendet die Transparenz-Filter auf die Grafiken an. Wenn man das Dokument dann ausdruckt bzw. in die Druckvorschau geht, wird das Dokument in diesem Status als Grundlage verwendet und daraus die Druckversion berechnet.

    Das heißt, es ist alleine von der Reihenfolge her nicht möglich, gewisse JavaScripte »beim Drucken« nicht anzuwenden.

    Du kannst also höchstens im Druckstylesheet spezielle Formatierungsregeln für das Druckaussehen vornehmen. Theoretisch könntest du den bei den Bildern angewendeten Transparenz-Filter im CSS wieder abschalten:

    img { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=false); }

    Ich habe aber nicht überprüft, ob das funktioniert.

    Mathias

    --
    »No nations, no borders.«
    SELFHTML Weblog
    1. Du kannst also höchstens im Druckstylesheet spezielle Formatierungsregeln für das Druckaussehen vornehmen. Theoretisch könntest du den bei den Bildern angewendeten Transparenz-Filter im CSS wieder abschalten:

      img { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=false); }

      Ich habe aber nicht überprüft, ob das funktioniert.

      Zunächst vielen Dank!
      Leider funktioniert das nicht.
      Mir ist gerade die Idee gekommen, die Javascript-Datei NUR über den Screenstylesheet aufzurufen, so das die Transparenz-Geschichte für den Druck gar nicht erst auftaucht. Leider wüsste ich aber nicht, ob das überhaupt geht?

      1. Hallo,

        Mir ist gerade die Idee gekommen, die Javascript-Datei NUR über den Screenstylesheet aufzurufen, so das die Transparenz-Geschichte für den Druck gar nicht erst auftaucht. Leider wüsste ich aber nicht, ob das überhaupt geht?

        Du kannst nicht so ohne weiteres ein JavaScript über ein Stylesheet aufrufen. Und selbst wenn das hypothetisch funktionieren würde, hättest du dasselbe Problem:

        Wenn du eine Seite im Browser aufrufst, wird das screen-Stylesheet aufgerufen. Wenn darin ein JavaScript steckt, so wird es ausgeführt und das Dokument selbst wird verändert. Das JavaScript durchläuft nämlich alle Grafiken und wendet den Transparenz-Filter an, indem die individuellen style-Eigenschaften der Grafiken geändert werden.

        Wenn das screen-Stylesheet dann wieder deaktiviert wird und das print-Stylesheet aktiviert (also das, was beim Drucken passiert), bleibt das Dokument geändert. Die gesetzten Inline-Styles würden weiter wirken, sowohl bei der screen- als auch bei der print-Ausgabe.

        Es gäbe höchstens die Möglichkeit, dass das Script nicht die Inline-Styles ändert, sondern über document.styleSheets das screen-Stylesheet dynamisch erweitert. Jede Grafik würde dann eine ID erhalten und im screen-Stylesheet würde automatisch eine entsprechende Regel angelegt. Das wäre aber ziemlicher Overkill.

        Mathias

        --
        »No nations, no borders.«
        SELFHTML Weblog
  2. Hi,

    Gibt es eine Möglichkeit, den Aufruf der Javascript-Datei für's Drucken zu verhindern? Bspw. über verschiedene CSS? Ich benutze hier auch zwei CSS. Eine für "screen" und eine für "print".

    Stelle einfach fest, welches Stylesheet aktiv ist - z.B. via currentStyle() (IE) bzw. getComputedStyle() (Rest der Welt). Und wenn ein zu testendes Element den Stil aus dem print hat, dann führe das JS nicht weiter aus.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hallo,

      Stelle einfach fest, welches Stylesheet aktiv ist - z.B. via currentStyle() (IE) bzw. getComputedStyle() (Rest der Welt). Und wenn ein zu testendes Element den Stil aus dem print hat, dann führe das JS nicht weiter aus.

      Das setzt voraus, dass das Dokument zum Drucken noch einmal (ohne es auf dem Bildschirm darzustellen) neu geladen wird und dabei alle Scripte erneut ausgeführt werden. Das ist aber doch nicht der Fall. Demnach würde ein JavaScript nie feststellen können, dass das print-Stylesheet angewendet wird, weil immer, wenn es ausgeführt wird, eine screen-Darstellung zugrunde liegt.

      Ich denke doch, es läuft so ab:

      1. Anwender surft das Dokument an
      2. das screen-Stylesheet wird angewendet, die Scripte werden ausgeführt und darüber gewisse Inline-Styles gesetzt, das Dokument wird auf dem Bildschirm gerendert
      3. Anwender druckt das Dokument
      4. das print-Stylesheet wird angewendet, das Druck-Layout wird im Speicher gerendert und ggf. in der Druckvorschau gezeigt

      Gut, wo sollte da irgendein Script ein aktives print-Stylesheet erkennen können?

      Oder sitze ich da einem Denkfehler auf?

      Mathias

      --
      »No nations, no borders.«
      SELFHTML Weblog
      1. Hi,

        Das setzt voraus, dass das Dokument zum Drucken noch einmal (ohne es auf dem Bildschirm darzustellen) neu geladen wird und dabei alle Scripte erneut ausgeführt werden. Das ist aber doch nicht der Fall.

        Du meinst, meine "gute Idee" sei gar nicht gut, weil nicht umsetzbar?

        Schnösel!

        Hast aber Recht ... =;-)

        ... leider ...

        ... war so gut die Idee ... >;->

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!