pingu: warum funzt dieses print - Script nicht ?

Hallo,

function printit(){
var Fenster = window.open("content.htm","Fenster1","width=100, height=100, left=10 ,top=10, location=no,menubar=no, toolbar=no, scrollbars=no, status=no");
Fenster.focus();
Fenster.print();
Fenster.close();

}

Fenster wird geöffnet und geschlossen, aber Nix gedruckt. Warum ?

Danke, Pingu

  1. hallo,

    Fenster wird geöffnet und geschlossen, aber Nix gedruckt. Warum ?

    Frag mal bitte die Javascriptkonsole in Mozilla oder Opera.

    Was möchtest du denn drucken, also welches Fenster?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Was möchtest du denn drucken, also welches Fenster?

      ich möchte das Document im Fenster1 drucken ... also das aufgepoppte.

      Grüße aus Berlin

      Pingu

  2. Hallihallo!

    Ich hatte mal ein ähnliches Problem. Es liess sich dadurch umgehen, daß ich zuerst den Fokus auf "Fenster" gesetzt habe,
    Fenster.focus();

    und dann das aktuelle, also fokussierte Fenster gedruckt habe:
    this.print();

    Ich habe nie erfahren, warum das Drucken auf dem offensichtlicheren Weg nicht funktionierte, muss aber zugeben, daß es mich nach dem Erfolg mit "this.print();" nicht mehr wirklich interessiert hat...
    Mittlerweile benutze ich für die Druckvorschau auch nicht mehr Javascript, sondern die eingebaute aus dem Browser, verbunden mit einem entsprechenden Stylesheet für die Druckausgabe. Damit spart man sich meiner Meinung nach eine Menge Ärger.

    Ich hoffe, ich konnte Dir helfen...

    Viele liebe Grüße,
    Der Dicki

    1. nein, leider funzt es damit auch nicht. es wurde zwar was gedruckt, aber nicht der Inhalt des zu aufgepoppten Fensters, sondern die Datei, in der der Link zum Drucken drin ist ...

      Also funzt der Focus() auch schon nicht ?

      Oder ?

      Pingu

      1. hallo,

        es wurde zwar was gedruckt, aber nicht der Inhalt des zu aufgepoppten Fensters, sondern die Datei, in der der Link zum Drucken drin ist ...

        Genau das war der Grund, weshalb ich dich vorhin gefragt habe, welchen Fensterinhalt du ausdrucken möchtest. Jetzt hast du selber herausgefunden, welcher Fensterinhalt es ist. Lösung: setze so eine print-Funktion noch in die Seite, die in dein popup-Fenster geladen werden soll.

        Also funzt der Focus() auch schon nicht ?

        Nein, allerdings "funktioniert" er sehr wohl - hat aber mit deiner Druckfunktion nichts zu tun.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallihallo!

          Genau das war der Grund, weshalb ich dich vorhin gefragt habe, welchen Fensterinhalt du ausdrucken möchtest. Jetzt hast du selber herausgefunden, welcher Fensterinhalt es ist. Lösung: setze so eine print-Funktion noch in die Seite, die in dein popup-Fenster geladen werden soll.

          Lustig finde ich die Tatsache, daß der IE in meinem Test genau das tut, was von ihm verlangt wird. Jetz habe ich gerade das Gleiche mit Firefox getestet, und der Druckt mir weder die "alte" noch die "neue" Seite, sondern ein leeres Blatt mit dem Titel "about:blank".

          Ich plädiere also dafür, für den Druck keinerlei Javascript zu benutzen, sondern nur reines HTML in Verbindung mit CSS. Die sicherste Möglichkeit ist es, dem Nutzer selber zu überlassen, welches Fenster gedruckt werden soll, indem er auf den entsprechenden Button des Browserfensters klickt.

          Viele liebe Grüße,
          Der Dicki

          1. hallo,

            Lustig finde ich die Tatsache, daß der IE in meinem Test genau das tut, was von ihm verlangt wird. Jetz habe ich gerade das Gleiche mit Firefox getestet, und der Druckt mir weder die "alte" noch die "neue" Seite, sondern ein leeres Blatt mit dem Titel "about:blank".

            Schau dir Svens Antwort an, dann weißt du etwas genauer, was da los ist. Der Rat, die Druckfunktion in die zu ladende Seite einzubauen, ist vermutlich die sinnvollste Lösung.

            Ich plädiere also dafür, für den Druck keinerlei Javascript zu benutzen, sondern nur reines HTML in Verbindung mit CSS.

            Schon recht. Allerdings habe ich mich an die Ursprungsfrage halten wollen, und die galt nun einmal Javascript.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Hallihallo!

              Schau dir Svens Antwort an, dann weißt du etwas genauer, was da los ist. Der Rat, die Druckfunktion in die zu ladende Seite einzubauen, ist vermutlich die sinnvollste Lösung.

              Stimmt, Sven hat da voll ins Schwarze getroffen. Leider war es mir nicht möglich, das onload- event (zumindest im FF) vom Ursprungsfenster aus zu kontrollieren. Es springt zwar an, aber immer noch viel zu früh.

              Ich plädiere also dafür, für den Druck keinerlei Javascript zu benutzen, sondern nur reines HTML in Verbindung mit CSS.

              Schon recht. Allerdings habe ich mich an die Ursprungsfrage halten wollen, und die galt nun einmal Javascript.

              Recht hast Du :-)

              Viele liebe Grüße,
              Der Dicki

            2. Hi!

              Schon recht. Allerdings habe ich mich an die Ursprungsfrage halten wollen, und die galt nun einmal Javascript.

              [quote:#214]

              Gruß aus Iserlohn

              Martin

              --
              Spiele dein Lied, aber zwinge die Melodie nicht der übrigen Menschheit auf.
              Selfcode: ie:{ fl:( br:^ va:) ls:# fo:| rl:( n4:( ss:| de:> js:) ch:? sh:( mo:| zu:)
              1. Hallo Martin.

                Schon recht. Allerdings habe ich mich an die Ursprungsfrage halten wollen, und die galt nun einmal Javascript.

                [quote:#214]

                Da kommt mir eine gute Idee. Eine Abwandlung meiner kürzlich geposteten Funktion:

                function quote() {  
                  
                  var n = document.getElementById('nachricht-text');  
                  
                  if (n) {  
                    n.innerHTML = n.innerHTML.replace(/(\[quote:#(\d+)\])/g,  
                '<a href="http://community.de.selfhtml.org/zitatesammlung/zitat$2">$1</a>');  
                  }  
                }
                

                Die beiden werde ich wohl bei Gelegenheit zusammenfassen.

                Einen schönen Montag noch.

                Gruß, Ashura

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                [HTML Design Constraints: Logical Markup]
              2. hallo Martin,

                [quote:#214]

                Öhm ... du meinst http://community.de.selfhtml.org/my/zitatesammlung/zitat214 und verweist auf die nette Erklärung: "ach ich liebe dieses Forum, hier kann ich nicht nur Posten sondern auch erklären warum ich gepostet habe ;-)"
                Das Problem ist, daß es da sowohl in der Zeichenfolge quote:#214 noch einen (unsichtbaren) Umbruch gibt, wie auch die Forumsoftware den Verweis derzeit noch nicht korrekt auflöst. Schade. Du solltest das bitte als bug melden, denn ganz umsonst steht der Hinweis, daß man eben auf genau diese Art ein Zitat aus der Zitatesammlung einbinden könnte, doch nicht da. Wird sicher noch repariert ;-)

                Grüße aus Berlin

                Christoph S.

                --
                Visitenkarte
                ss:| zu:) ls:& fo:) va:) sh:| rl:|
                1. Hallo Christoph.

                  […] wie auch die Forumsoftware den Verweis derzeit noch nicht korrekt auflöst. Schade. Du solltest das bitte als bug melden, […]

                  Bloß nicht, davon gibt es schon genug.

                  Einen schönen Montag noch.

                  Gruß, Ashura

                  --
                  sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                  „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                  [HTML Design Constraints: Logical Markup]
                  1. Hallihallo!

                    Vielleicht hilft ja bis zur Behebung des Bugs dieses Bookmarklet weiter, basierend auf Ashuras Funktion:

                    javascript:function quote(){var p = document.getElementsByTagName('p');for(i=0;i<p.length;i++){p[i].innerHTML=p[i].innerHTML.replace(/([quote:#(\d+)])/g,'<a href="http://community.de.selfhtml.org/zitatesammlung/zitat$2">$1</a>');}}void quote();

                    (Leider auch hier keine Verlinkung möglich...)

                    Viele liebe Grüße,
                    Der Dicki

      2. Hallihallo!

        Wirklich seltsam: Ich habe mal einen Test gemacht, mit genau Deiner Funktion darin.
        Und was soll ich sagen? Es wird genau wie gewünscht das Popup geöffnet, ich werde nach meinem Drucker gefragt, die richtige Seite wird gedruckt, und das Fenster schliesst sich wieder. Kurz: Alles so, wie es soll.

        Ergo: Mein Schuss ins Blaue basierte wohl auf einer falschen Erinnerung, sorry.
        Dein Problem liegt also nicht an der Funktion, die Du gepostet hast.

        Viele liebe Grüße,
        Der Dicki

  3. Moin!

    Du hast ein Timingproblem.

    function printit(){
    var Fenster = window.open("content.htm","Fenster1","width=100, height=100, left=10 ,top=10, location=no,menubar=no, toolbar=no, scrollbars=no, status=no");

    Hier wird der Browser zum Laden der Datei aufgefordert. Erwartungsgemäß dauert es immer ein paar Sekunden, bis das abgeschlossen ist - sieht man ja auch, wenn man über normale Links neue Seiten anfordert.

    Fenster.focus();

    Aber schon eine Millisekunde später kriegt das neue Fenster den Fokus...

    Fenster.print();

    ...und wird ausgedruckt. Wieviele Inhalte sind da wohl bis zu diesem Zeitpunkt schon geladen? Antwort: Mutmaßlich keine. Also kann auch nichts gedruckt werden.

    Fenster.close();

    Und kaum dass "nichts" gedruckt wird, wird das Fenster auch direkt schon wieder geschlossen.

    Du mußt warten, bis der Fensterinhalt komplett geladen ist. Da man das in Sekunden nicht sagen kann, wäre "onload" ein passendes Event, welches innerhalb des zu druckenden Dokuments passend definiert werden sollte.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."