Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.07.2009, 11:33 Titel: HTML-Problem: JavaScript-Druckfunktion läuft nicht gescheit |
|
|
Hallo Leute,
habe mal wieder ein Problem im täglichen HTMl-Kampf. Ich würde gerne meiner Homepage eine Druck-Funktion verpassen, so in diesem Stil:
http://www.s147626996.online.de/tmp/
Die JS-Funktion printDocument() erstellt ein neues Fenster mit demselben Inhalt, ändert dann dessen Stylesheet-Angaben und dann soll dieses Fenster gedruckt werden. Aber es erscheint einfach ein zweites Fenster mit identischem Inhalt. Wieso? Die Stylesheet-Änderungen zeigen keinen Effekt.
Wo ist der Fehler?
Grüße
Jens
PS: Ich weiß, ich könne ein Print-Stylesheet einbinden, aber dann sieht man die Druckversion erst auf dem Papier, ich will, dass die vorher sichtbar ist. _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.07.2009, 12:37 Titel: |
|
|
Druckvorschau sollte doch jeder Browser können, da siehst du das Print-Layout auch.
Du solltest dir, sofern du den Firefox verwendest, die Webdeveloper-Toolbar zulegen, die ist bei sowas sehr nützlich. Da erscheint auch gleich in der JavaScript-Konsole:
Code: | Fehler: DruckFenster.document.all.Seite is undefined
Quelldatei: http://www.s147626996.online.de/tmp/
Zeile: 16 |
document.all ist Microsoft-Syntax! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.07.2009, 12:40 Titel: |
|
|
Ja, das stimmt, aber auch ohne dieses .all, z.B. mit getElementById tritt immer noch nicht die gewünschte Wirkung auf...
Jens _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.07.2009, 12:46 Titel: |
|
|
Es kann sein, dass die Seite noch lädt und deswegen nix passiert. Ich würde das eher so in der Art machen:
Code: |
function printDocument () {
DruckFenster = window.open(document.location.href);
DruckFenster.onload = function(){faerbeEin();};
}
function faerbeEin() {
//einfärben
} |
Nicht getestet, könnte aber klappen. In diesem Fall müsste theoretisch die faerbeEin-Funktion im Child-Fenster aufgerufen werden, sobald es geladen wurde, das heißt, du brauchst nur noch document.getElementById(...) in der Funktion zu benutzen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.07.2009, 13:09 Titel: |
|
|
Die neue Version mit deinem Vorschlag ist hochgeladen, klappt aber auch nicht.
Mensch, woran liegt das bloß? Kann doch nicht sein... _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.07.2009, 13:11 Titel: |
|
|
Code: | Fehler: DruckFenster is null
Quelldatei: http://www.s147626996.online.de/tmp/
Zeile: 23 |
du darfst den bezeichner "druckfenster" in der change()-Funktion nicht mehr verwenden. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.07.2009, 13:17 Titel: |
|
|
Man sollte meinen darauf könnte ich selber kommen :roll: Danke für den Hinweis. :)
Aber es funzt immer noch nicht :-(
//edit: Jawolle, läuft :-) Habe zur Sicherheit mal das Druckfenster als parameter an change() übergeben. :freu:
//edit2: zu viele Smileys... _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.07.2009, 18:29 Titel: |
|
|
Hallo ihr,
das Problem hat sich doch leider nicht gelöst - bei IE6 z.B. klappt's gar nicht. Daher musste eine andere Lösung her zum Einbinden alternativer Stylesheets. Bei meiner Recherche bin ich auf diesen selfHTML-Foreneintrag gestoßen:
http://forum.de.selfhtml.org/archiv/2007/1/t143826/
Meine beiden Stylesheets heißen style1.css und style2.css, darin ist jeweils aus Testzwecken h1 auf rot bzw. auf grün gesetzt, und die HTML-Datei besteht auch nur aus einem <h1> und einem Link zur javascript:aendern();
Ich habe mir folgendes Skript geschrieben:
Code: |
function aendern () {
// Stylesheet-Eintrag entfernen
var child = document.getElementsByTagName("head")[0].lastChild;
dummy = document.getElementsByTagName("head")[0].removeChild(child);
// neues <link> erzeugen
var myLink = document.createElement("link");
// Attribute erstellen
// <link rel="" href="" type="">
var myLink_rel = document.createAttribute("rel");
myLink_rel.nodeValue = "stylesheet";
var myLink_type = document.createAttribute("type");
myLink_type.nodeValue = "text/css";
var myLink_href = document.createAttribute("href");
myLink_href.nodeValue = "style2.css";
// Attribute hinzufügen
myLink.setAttributeNode(myLink_rel);
myLink.setAttributeNode(myLink_type);
myLink.setAttributeNode(myLink_href);
// Das Element wieder hinzufügen
document.getElementsByTagName("head")[0].appendChild(myLink);
}
|
Aber das funktioniert nicht... Obwohl es genau so ist, wie in den Beispielen auf Selfhtml.. Was ist falsch?
Gruß
Jens
//edit: und wieder einmal war ich zu flott, jetzt klappt es (Code oben ist funktionsfähig). Ist wirklich ne saubere Lösung jetzt, fast schon XML-Standard
Ich lass es mal stehen hier, vielleicht wird ja eineR mal fündig, wenn er / sie das gleiche Problem hat. _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
|