romy: +JS Drucken: Wie am Besten realisieren

Hi,

So da bin ich wieder, auf zu neuen Taten ;)
Also ich würde gern einen kleinen Button oä., der ein Popup öffnet, indem bestimmter Text des Hauptfensters angezeigt wird und dort die Optionen zum Drucken und Speichern bestehen.
Die Frage ist, wie bekomme ich am Besten meine Inhalte in das neue Popup (Popup macht insofern Sinn, da es später mal Möglichkeiten geben soll, die Anzeige noch weiter einzuschränken, ich arbeite immernoch im Intranet)

Mein erster Gedanke war so etwas:
<code>
var F = window.open(adress,"Drucken","width=600,height=650");
F.focus();
var content = document.getElementById("maincontent").innerHTML;
F.document.getElementById("content").innerHTML = content;
</code>

das ist auch alles toll, aber logischerweise, weiss er nicht mehr wo die Bildchen alle sind und Styles erkennt er auch nicht und lässt sich auch keine zuweisen.
Die Bilchen, die ich so habe, würde ich ausserdem unheimlich gern entfernen, desweiteren die Farben auf schwarz+weiss reduzieren.

Das mit den Farben fällt mir gerade ein wie es geht (ist schon komisch manchmal, was schreiben bewirkt)
Aber was mache ich mit den Bildern?

Oder gibt es andere bessere Vorschläge?

vielen Dank

ciao
romy

  1. Hallo Romy,

    Du koenntest fuer das Popup eine PHP Seite machen mit komplettem Header, Stylesheet, Base href fuer die Bilder usw. und dann via GET den Namen des divs uebermitteln, der angezeigt werden soll.
    Im Body der Popup- Seite zeigst du nur den div 'maincontent' oder was auch immer, den du dir vorher mit regularem Ausdruck und File OP aus der 'Mutterseite' herausgefischt hast.
    Was den Header angeht, hab ich eine Klasse, die ganz gut geeignet waere, schick mir eine Mail, wenn Du eine Kopie willst.

    Dieter

    1. Hi Dieter,

      Du koenntest fuer das Popup eine PHP Seite machen mit komplettem Header, Stylesheet, Base href fuer die Bilder usw. und dann via GET den Namen des divs uebermitteln, der angezeigt werden soll.

      so ungefähr funktioniert es ja auch, habe aber das Problem, dass ich eigentlich die Seite etwas modifizieren müsste, damit niemand auf dumme Gedanken kommt. Das heisst im Klartext, das alle Links raus müssten. Auf die oben beschriebene Weise bekomme ich aber nur, was direkt im einem Teil des Hauptfensters steht.
      Die Parsingmöglichkeiten in Javascript sind eher schlecht, oder habe ich was übersehen?

      Rein mit PHP habe ich das Problem, das ich ja vom druckbutton aus gesehen nicht weiss, welche Variablen in dieser Anzeige gerade relevant sind bzw. welche Anzeige. Mal Tabellen, mal andere Dinge.

      Ich liebe Dinge mit 100.000 Unbekannten ...

      Was den Header angeht, hab ich eine Klasse, die ganz gut geeignet waere, schick mir eine Mail, wenn Du eine Kopie willst.

      gern

      ciao
      romy

      1. Hallo,

        Wenn ich dich recht verstehe, brauchst Du JS ja nur um das Fenster aufzumachen, den Rest kann PHP erledigen. d. h du koenntest die Links doch mit preg_replace
        loeschen.
        Den Header hab ich dir geschickt.

        Dieter

  2. Hallo romy,

    Die Bilchen, die ich so habe, würde ich ausserdem unheimlich gern entfernen

    Die Anzahl deiner Bildchen bekommst du entweder über das image-Objekt oder DOM-mäßig mit:

    bilder=document.getElementsByTagName("img");
        anzahl=bilder.length;

    Und dann kannst du mit "removeChild" die Bilder rausschmeißen:

    [Schleife über anzahl]
          obj=document.getElementsByTagName("img")[i];
          document.getElementsByTagName("body")[0].removeChild(obj);

    Das Gleiche funktioniert natürlich auch mit Links etc.

    Grüße nach L

    Maxx (aus A am L)

    1. Hi Maxx,

      Die Anzahl deiner Bildchen bekommst du entweder über das image-Objekt oder DOM-mäßig mit:

      bilder=document.getElementsByTagName("img");
          anzahl=bilder.length;

      Und dann kannst du mit "removeChild" die Bilder rausschmeißen:

      [Schleife über anzahl]
            obj=document.getElementsByTagName("img")[i];
            document.getElementsByTagName("body")[0].removeChild(obj);

      mhm, klingt ganz gut, schau ich mir gleich mal an, obwohl mir css lieber wäre.
      zumindest kriege ich so die buttons alle weg.

      Grüße nach L

      zurück

      Maxx (aus A am L)

      hilf mir auf die Sprünge ;)

      ciao
      romy

      1. Hi Maxx,

        ich habe jetzt mal was probiert, aber es bringt noch nicht den gewünschten Effekt:
        <code>
        buttons=F.document.getElementsByTagName("input");
        anzahl=buttons.length;
        var i=0;
        while(i<anzahl) {
          if(F.document.getElementsByTagName("input")[i].type=="button" || F.document.getElementsByTagName("input")[i].type=="submit") {
         obj=F.document.getElementsByTagName("input")[i];
         F.document.getElementsByTagName("body").removeChild(obj);
          }
          else {
         F.document.getElementsByTagName("input")[i].readOnly = true;
          }
          i++;
        }

        link=F.document.getElementsByTagName("a");
        anzahl=link.length;
        var j=0;
        while(i<anzahl) {
         F.document.getElementsByTagName("a")[j].href='#';
         j++;
        }
        </code>

        also das readonly setzen macht er, bei den anderen Anweisungen passiert gar nichts, weder einen Fehler noch eine Reaktion.

        Was mache ich falsch?

        ciao
        romy

        1. Hallo romy,

          obj=F.document.getElementsByTagName("input")[i];
           F.document.getElementsByTagName("body").removeChild(obj);

          [Schleife]
            obj=document.getElementsByTagName("tag")[0];
          -------------------------------------------^
            document.getElementsByTagName("body")[0].removeChild(obj);

          beim löschen must du aufpassen. Wenn du ein "Child" löscht rutschen die restlichen ... äh, nach. Du kannst (musst) also immer den [0]'er löschen wenn du "von vorne löscht". Das hatte ich vorher auch verkehrt gepostet :-(

          var j=0;
          while(i<anzahl) {

          i != j

          HTH

          Maxx

          P.S. Augsburg am Lech. Aber ich muss gestehen, dass ich nur eine vage Ahnung habe was L sein könnte .... Franken?

          1. Hi Maxx,

            bestehst Du eigentlich auf die xx?

            [Schleife]
              obj=document.getElementsByTagName("tag")[0];
            -------------------------------------------^
              document.getElementsByTagName("body")[0].removeChild(obj);

            beim löschen must du aufpassen. Wenn du ein "Child" löscht rutschen die restlichen ... äh, nach. Du kannst (musst) also immer den [0]'er löschen wenn du "von vorne löscht". Das hatte ich vorher auch verkehrt gepostet :-(

            alright

            var j=0;
            while(i<anzahl) {
            i != j

            autsch, da war's wieder, das fehlerteufelchen

            Aber ich muss gestehen, dass ich nur eine vage Ahnung habe was L sein könnte .... Franken?

            Leipzig an der Pleiße

            ciao
            romy

  3. Moin!

    Also ich würde gern einen kleinen Button oä., der ein Popup öffnet, indem bestimmter Text des Hauptfensters angezeigt wird und dort die Optionen zum Drucken und Speichern bestehen.

    Benutze CSS und ein damit definiertes Druckstylesheet. Dann kannst du dir das Gehampel mit einer generierten Druckansicht im Popup bei den meisten Browsern (ausgenommen NS 4, und vielleicht auch IE 4) sparen.

    das ist auch alles toll, aber logischerweise, weiss er nicht mehr wo die Bildchen alle sind und Styles erkennt er auch nicht und lässt sich auch keine zuweisen.
    Die Bilchen, die ich so habe, würde ich ausserdem unheimlich gern entfernen, desweiteren die Farben auf schwarz+weiss reduzieren.

    Geht alles mit CSS wunderbar.

    Das mit den Farben fällt mir gerade ein wie es geht (ist schon komisch manchmal, was schreiben bewirkt)
    Aber was mache ich mit den Bildern?

    Offenbar hat das Popup eine andere Basis-URL, als deine ursprüngliche Seite.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hi Sven,

      Benutze CSS und ein damit definiertes Druckstylesheet. Dann kannst du dir das Gehampel mit einer generierten Druckansicht im Popup bei den meisten Browsern (ausgenommen NS 4, und vielleicht auch IE 4) sparen.
      Geht alles mit CSS wunderbar.

      bin jetzt auch soweit, es so zu machen,
      ich werfe also die Bilder raus (display:none)
      ich würde gern auch alle buttons rauswerfen, weiss aber nicht, wie ich nur auf solche zugreifen kann bzw. alle anderen inputs auf readlonly setzen.

      die Sache mit:
      input[type=button] funktioniert ja nicht mit dem IE, ist aber leider der benutzte Browser der Kundenfirma.

      Aussdem wäre irgendetwas wie disable schön, im Moment habe ich bei den Links nämlich nur den Cursor geändert, aber anklickbar sind sie ja immernoch, auch wenn man ihnen es nicht ansieht.

      Hast Du noch ein paar Vorschläge für mich?

      Offenbar hat das Popup eine andere Basis-URL, als deine ursprüngliche Seite.

      das war es...

      ciao
      romy

      1. Moin!

        bin jetzt auch soweit, es so zu machen,
        ich werfe also die Bilder raus (display:none)
        ich würde gern auch alle buttons rauswerfen, weiss aber nicht, wie ich nur auf solche zugreifen kann bzw. alle anderen inputs auf readlonly setzen.

        Wozu readonly? Du machst kein Popupfenster, du setzt einfach ein weiteres CSS in die Hauptdatei rein: <link rel="stylesheet" media="print"...>.

        In dieser Datei definierst du, wie die Elemente deiner Seite gedruckt aussehen sollen:
        img { display:none; }
        #menu { display:none;}
        a { text-decoration:none; color:black; }

        ...uns so weiter.

        die Sache mit:
        input[type=button] funktioniert ja nicht mit dem IE, ist aber leider der benutzte Browser der Kundenfirma.

        Du bist leider gezwungen, den einzelnen Formularelementen eigene Klassen zuzuweisen, damit du auf sie mit CSS zugreifen kannst.

        Aussdem wäre irgendetwas wie disable schön, im Moment habe ich bei den Links nämlich nur den Cursor geändert, aber anklickbar sind sie ja immernoch, auch wenn man ihnen es nicht ansieht.

        Du machst kein Popup, also kann man im Popup auch nichts fälschlich anklicken. Du machst nur einen Button "Drucken", welcher window.print() aufruft - und das Druckstylesheet sorgt dann für die korrekte Druckausgabe: Aller Text in Schwarz, Links nicht unterstrichen, Bilder (und vielleicht auch Menü) ausgeblendet etc. Diese Druckausgabe kommt entweder (beim IE6) in der Druckvorschau oder beim Drucker auf Papier heraus - und da kann man dann nichts mehr anklicken oder in Input-Feldern ändern.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hi Sven,

          Wozu readonly? Du machst kein Popupfenster,

          ist leider Vorgabe ...

          In dieser Datei definierst du, wie die Elemente deiner Seite gedruckt aussehen sollen:
          img { display:none; }
          #menu { display:none;}
          a { text-decoration:none; color:black; }

          das würde ich trotzdem gern machen

          Du bist leider gezwungen, den einzelnen Formularelementen eigene Klassen zuzuweisen, damit du auf sie mit CSS zugreifen kannst.

          das ist schlecht, bzw. da bin ich schlecht ;) mit etwas mehr Konsequenz bei der Vergabe der Klassen, wäre diese Sache jetzt wohl einfacher...

          Ich bin aber trotzdem schon nahe der Zufriedenheit. Aber ich weiss nicht so richtig, was ich mit den links anstellen soll, die kann ich ja nicht einfach ausblenden, weil dann noch Text drin steht, der relevant ist. Also was nun?

          ciao
          romy