Markus: Neues Fenster öffnen und dann drucken?!

Ich würde gerne eine Seite (nur für den NN) ohne eigene Menüleiste anzeigen lassen. Die Seite ist mit Layern aufgebaut!
Um nun den Layer, in dem der hauptsächliche Text steht (Layer enthält extern geladene Dateien) aber trotzdem ausdrucken zu können (und nur diesen Layer!), habe ich mir überlegt, die aktuelle URL des Layers auszulesen und mit dieser ein neues Fenster öffnen zu lassen.
Dieses Fenster soll dann sofort gedruckt werden. Mit dem folgenden Code wird aber seltsamerweise nicht die Url des Layers als URL an das neue Fenster übergeben, sondern die URL des Haupfensters.

var scrwidth = eval(screen.width-10);
function printpoem() {
  aktuell = eval('window.document.main.src');
  printwindow = eval('window.open("","zweitfenster","width='+scrwidth+',height='+screen.height+',screenX=0,screenY=0");');
  printwindow.document.write(location.href = aktuell);
  printwindow.print();
  }

Ich habe auch schon folgendes versucht:

var scrwidth = eval(screen.width-10);
function printpoem() {
  aktuell = eval('window.document.main.src');
  printwindow = eval('window.open("'+aktuell+'","zweitfenster","width='+scrwidth+',height='+screen.height+',screenX=0,screenY=0");');
  printwindow.print();
   }

Dann öffnet er zwar die richtige Datei (Inhalt des Layers) im neuen Fenster und läßt die URL des Hauptfensters unberührt, aber er druck auch das Dokument nicht :-(

Vielleicht hat mir ja jemand einen kleinen Tip bezüglich des bestehenden scripts oder vielleicht gibt es da ja auch eine viel bessere Lösung.

Merci beaucoup.

Markus

  1. Hi,

    printwindow = eval('window.open("","zweitfenster","width='+scrwidth+',height='+screen.height+',screenX=0,screenY=0");');

    hier weist Du der Variable printwindow die Rückgabe der eval()-Methode zu, also vermutlich 'true'. Nebenbei sehe ich weder in diesem, noch in dem vorherigen eval() einen Sinn; die einfache Zuweisung der Objektreferenz hätte nicht nur absolut gereicht, sondern würde auch potentielle Risiken reduzieren.

    printwindow.document.write(location.href = aktuell);

    Warum schreibst Du in das Dokument die Rückgabe einer Objekteigenschafts-Zuweisung?
    printwindow.location.href = aktuell;

    printwindow.print();

    printwindow.focus(); // vorsichtshalber, denn window.print() bezieht sich auf das aktuelle Fenster, nicht auf das referenzierte
    if (window.print) { printwindow.print(); } // sei nie(!) sicher, ob eine Methode bekannt ist!

    Statt printwindow.print() ginge auch window.print(), aber bei einigen Browsern weiß man nie - und wer weiß, wo Du dieses Script wiederverwendest :-)

    Von der print()-Geschichte mal abgesehen, solltest Du Dich noch ein wenig mit den Grundlagen von JavaScript beschäftigen. Deine eval()erei ist nicht nur unnötig und potentiell riskant (manchmal kannst Du _nicht_ vorher absehen, was da jetzt ausgeführt wird), sondern in einigen Fällen auch schlicht falsch. Benutze die vorhandenen Objekte, Methoden und Eigenschaften; vermeide eval().

    Cheatah