Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

HTML-Problem: JavaScript-Druckfunktion läuft nicht gescheit

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.07.2009, 11:33    Titel: HTML-Problem: JavaScript-Druckfunktion läuft nicht gescheit Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.07.2009, 12:37    Titel: Antworten mit Zitat

Druckvorschau sollte doch jeder Browser können, da siehst du das Print-Layout auch. Zunge rausstrecken

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.07.2009, 12:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.07.2009, 12:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.07.2009, 13:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.07.2009, 13:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.07.2009, 13:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.07.2009, 18:29    Titel: Antworten mit Zitat

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 lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz