!$"§%@@!%&/ Internet Explorer 6!!
Peter Mairhofer
- browser
Hi,
Der *fiep* *fiep* Internet Explorer 6 hat riesen Probleme beim Drucken! Er schneidet blindlinks einfach Tabellen und Bilder beim Drucken ab!
Beim IE7 hab ichs noch nicht getestet, beim IE8 wird glücklicherweise alles gedruckt (und beim FF sowieso).
Gibts Hoffnung dem Problem Herr zu werden?
Ausgangspunkt sind HTML Daten aus einem proprietärem Programm (*fieeeeep* Adobe RoboHelp) die in einer prorietären Anwendung dargestellt werden. Deswegen muss das ganze nur unter IE6 bis IE9 funktionieren. Über ein selbstgeschriebenes Perl-Script habe ich allerdings die Möglichkeit, den Schrott den RoboHelp liefert etwas zu modifizieren.
@Tabellen: RoboHelp schreibt in alle Tabellen eine fixe Breite (width=), ebenso ein margin-left, sofern es in der Ursprungsdatei eine Einrückung gibt. Das löse ich bisher mit:
@media print
{
width: 90%;
margin-left: 0;
}
Leider scheint das nicht zu reichen. Der IE6 schneidet Tabellen noch immer nach Belieben ab.
Bei den Bildern hab ich bereits alle erzwungenen width= und height= entfernt. Allerdings kann es natürlich sein dass ein Bild breiter ist als eine A4 Seite. Am Bildschirm kommen dann Scrollbalken. Und beim Drucken schneidet sie der IE 6 einfach ab!
Testweise habe ich ebenfalls
@media print
{
width: 90%;
}
gemacht. So werden alle Bilder zwar so verkleinert dass sie gedruckt werden, allerdings werden auch kleine Bilder aufgeblasen. Also auch nicht des Rätsels Lösung.
Da muss es doch eine Lösung geben, dass dieses *fieep* Programm die Daten druckt die es anzeigt...oder?!
Hat irgendwer einen Tipp!
LG von einem verzweifelten Peter
IE 6 ist "tot", das wurde er offiziell von Microsoft erklärt. Insofern würd ich nicht mehr versuchen da irgendwas richtig anzuzeigen oder zu korrigieren.
IE 6 ist "tot", das wurde er offiziell von Microsoft erklärt. Insofern würd ich nicht mehr versuchen da irgendwas richtig anzuzeigen oder zu korrigieren.
Geht leider nicht.
Das Ding muss auf Systemen laufen die IE6 installiert haben!
LG Peter
Das Ding muss auf Systemen laufen die IE6 installiert haben!
Ich weiß diese Art von Antworten bringt dir nichts. Aber nachdem der IE 6 offiziell nicht mehr existiert, sollten die Entwickler das auch berücksichtigen und ggf. an ihre Kunden weitergeben. Sonst wird der alte Ballast nie mehr aufgeräumt.
Verkaufs doch als was modernes, vielleicht zieht ja dieses Argument.
Hi,
Gibt es wenigstens eine *offizielle* Erklärung welche Browserversionen von MS nicht mehr unterstützt werden (incl. Sicherheitsupdates) etc.?? Einzig eine offizielle Erklärung von MS könnte mir hier noch weiterhelfen.
Ansonsten hab ich folgendes Problem: Es handelt sich um eine ur-alte Datenbankanwendung (seit 1992!) die auf dem WinHelp32 System basiert. Die winhelp32.exe ist jedoch unter WindowsXP nur mehr als Kompatibilität dabei, unter > Vista gar nicht mehr. Die Version von der MS Homepage ist so buggy dass die ganzen Erweiterungs DLLs für das System nicht mehr funktionieren.
Also gab es vor ca. 2 Jahren die (im Nachhinein Fehl-) Entscheidung, die Anwendung zu portieren. Die Daten liegen nun in konvertiertem HTML vor das mehr als nur Probleme bereitet und das IE Control in einer selbstgeschriebenen Viewer Anwendung sorgt für die Darstellung.
Und hier ist das Problem: das Zeug muss bei den Kunden einfach weiterfunktionieren! Auch wenn auf einem Rechner noch der IE6 oben ist. Der Rechner muss ja gar nicht im Internet hängen; das IE Control wird ja nur zur Darstellung verwendet.
Und um Himmels willen, nie hätte ich gedacht, dass der schei** IE solche riesen Probleme bereitet als er schon tat und vor allem eine verdammte Seite einfach nicht ausdruckt! GRMMML!
LG
Peter
Hi!
Gibt es wenigstens eine *offizielle* Erklärung welche Browserversionen von MS nicht mehr unterstützt werden (incl. Sicherheitsupdates) etc.?? Einzig eine offizielle Erklärung von MS könnte mir hier noch weiterhelfen.
Nein, im Gegenteil. Die Microsoft-Empfehlungen, den IE6 doch bitte sterben zu lassen, waren zwar da, auch mit recht haarsträubenden Milch-Vergleichen, aber die offizielle Linie ist, dass erst zum Support-Ende eines Betriebssystems auch der Support für damit ausgelieferte Software endet. Der IE6 ist Bestandteil von XP und ist damit an die Supportzeiten von XP gebunden.
Und um Himmels willen, nie hätte ich gedacht, dass der schei** IE solche riesen Probleme bereitet als er schon tat und vor allem eine verdammte Seite einfach nicht ausdruckt! GRMMML!
Der monetäre Mehraufwand diesen Browser zu befriedigen, ist kein Argument dafür, ihn nicht aufzuwenden?
Lo!
Der IE6 ist Bestandteil von XP und ist damit an die Supportzeiten von XP gebunden.
Sehe ich anders. IE6 war Bestandteil von Win2K. In XP war dann der IE7 drin.
Der IE6 ist Bestandteil von XP und ist damit an die Supportzeiten von XP gebunden.
Sehe ich anders. IE6 war Bestandteil von Win2K. In XP war dann der IE7 drin.
Das siehst du falsch. Zu windows 2000 kann der Martin vermutlich mehr sagen, aber als Windows XP rauskam, dachte noch niemand an einen IE 7.
Struppi.
Sehe ich anders.
Ich nicht.
In XP war dann der IE7 drin.
Windows XP war seiner Zeit vorraus, aber so weit?
Windows XP: 2001
Internet Explorer 7: 2006
IE6 war Bestandteil von Win2K.
Das ist natürlich auch falsch ;)
Bounjoun Frank Laus,
In XP war dann der IE7 drin.
Keineswegs. XP kam mit Internet Explorer 6 (siehe: http://de.wikipedia.org/wiki/Microsoft_Windows_XP#Service_Pack_2 <- hier der Abschnitt über den SP2, der mit einer »verbesserten« Version des IE 6 kam).
Ende 2001, als XP herauskam, gab es noch keinen IE 7.
Adiou.
Hallo,
Der IE6 ist Bestandteil von XP und ist damit an die Supportzeiten von XP gebunden.
Sehe ich anders.
das ist deine Entscheidung.
IE6 war Bestandteil von Win2K. In XP war dann der IE7 drin.
Beides falsch. Win2k (Windows 2000) enthält den IE5 und lässt sich maximal auf IE6 upgraden, XP den IE6 und verträgt auch den IE8.
Ciao,
Martin
Was spricht dagegen dass die Kundenrechner auf aktuellen Stand gebracht werden? Der Kunde sollte schon auch ein bisschen mitspielen.
Was spricht dagegen dass die Kundenrechner auf aktuellen Stand gebracht werden? Der Kunde sollte schon auch ein bisschen mitspielen.
Dagegen spricht dass der größte Kunde der größte Arbeitgeber des Landes ist (nämlich die Regierung), mit einer riesigen EDV Abteilung. Da gibts ganz einfach von meiner Seite nichts zu melden. Das Zeug muss weiterlaufen wie bisher.
LG
Peter
IE 6 ist "tot", das wurde er offiziell von Microsoft erklärt.
Dennoch wird er aber noch offiziell unterstützt und ist noch in seinem Lifecycle. Tot ist etwas anderes.
Der IE6 hat noch mehr Probleme als nur beim Drucken - und da Bilder und Tabellen einfach unskaliert gedruckt werden, wird am Ende der Seite eben Schluss gemacht. Statt die width-Eigenschaft zu verwenden, könntest Du Dir vielleicht noch mit der nicht standardkonformen zoom-Eigenschaft des IE behelfen:
@media print { zoom: 0.9; }
Der Vorteil: nur der IE versteht diese Eigenschaft, vernünftige Browser sind davon nicht betroffen; allerdings wird Dein CSS dadurch invalide. Möglicherweise ist es daher besser, diesen Teil des CSS nur per Conditional Comment einzubinden.
Da Drucken im Browser aber ohnehin eine problematische Angelegenheit ist, kann es durchaus sinnvoll sein, die Druckausgabe im PDF-Format auszuliefern.
Gruß, LX
» @media print { zoom: 0.9; }
Hi,
Danke mal für diesen Tipp, werde ich probieren! Ein Problem wird nur sein: Wie weiss ich welche zoom Angabe ich verwenden muss damit einfach nur alles gedruckt wird?
Zum invaliden CSS etc: KOMPLETT egal! Es geht lediglich um um eine Datenbankanwendung die HTML als Ausgabemedium nutzt und das Web Browser ActiveX control in einem MFC Programm nutzt. Es muss also *nur* mit dem IE funktionieren!
Das Problem ist auch, dass bei vielen Kunden eben noch firmenweit der IE6 eingesetzt wird. Bitte nicht fragen wieso, mich schaudert es selbst, aber das ist halt leider was was ich nicht leicht ändern kann :-(
Irgendwie muss ich dazu einfach eine Lösung finden :-(
Eventuell ein paar prinzipielle Fragen:
1.) Welche DTD nehme ich am besten für problemlose und *konsistente* Darstellung in IE6 - IE9 ? Gar keine aka Quirks Modus? (das ist jetzt der Fall)
2.) werden width="" Angaben (z.B. in Tabellen und Bildern) immer durch die CSS Pendants überschrieben?
3.) Wenn ich einen style Tag mit z.B. margin habe, wird dieser durch einen weiteren, globalen @media print {} überschrieben? Falls nein, gibt es die Möglichkeit dazu, ohne die z.B. statische style="margin: 99pt" Definition in eine CSS Klasse auslagern zu müssen?
Vielen Dank und LG
Peter
Hallo, Peter!
Danke mal für diesen Tipp, werde ich probieren! Ein Problem wird nur sein: Wie weiss ich welche zoom Angabe ich verwenden muss damit einfach nur alles gedruckt wird?
Das kann Dir leider keiner genau sagen, deswegen ja auch der Alternativvorschlag mit dem PDF. Man könnte mit JavaScript nach dem Onload-Event die Breite der Seite berechnen und daraufhin ein Style mit dem richtigen Zoom-Faktor einfügen, etwa so:
window.onload = function(o) { return function() {
if (o) { o(); }
if (!document.all || window.XMLHttpRequest) { return; // IE6 only }
var stylediv = document.createElement('div');
stylediv.innerHTML = '<div>IE...</div><style type="text/css">@media print { zoom: '+(800/(document.documentElement.clientWidth||800))+'; }</style>';
document.getElementsByTagName('head')[0].appendChild(stylediv.getElementsByTagName('style')[0]);
}}(window.onload);
Dabei bin ich 1. davon ausgegangen, dass die maximale gedruckte Breite sicherheitshalber ca. 800px entsprechen sollte und 2. dass Du nicht im Quirks-Mode bist (ansonsten bitte document.body.clientWidth verwenden und zum Schämen in die Ecke stellen). An dieser Stelle kannst Du gerne mit den Zahlen ein wenig herumspielen, um Dein Ziel zu erreichen.
1.) Welche DTD nehme ich am besten für problemlose und *konsistente* Darstellung in IE6 - IE9 ? Gar keine aka Quirks Modus? (das ist jetzt der Fall)
Traurige Wahrheit: der IE ignoriert den Inhalt einer DTD komplett, solange die Doctype-Definition nur vorhanden und nicht mit einer vorangestellten XML-Deklaration versehen ist.
2.) werden width="" Angaben (z.B. in Tabellen und Bildern) immer durch die CSS Pendants überschrieben?
Ja und jein. Normalerweise sind die width-Attribute implizit, während die style-width-Angaben explizit sind. Das heißt: bei einem Image- oder Video-Element wird dadurch normalerweise die Auflösung und nicht die Größe der Darstellung definiert. Damit orientiert sich die Darstellung immer an der Style-Angabe.
3.) Wenn ich einen style Tag mit z.B. margin habe, wird dieser durch einen weiteren, globalen @media print {} überschrieben? Falls nein, gibt es die Möglichkeit dazu, ohne die z.B. statische style="margin: 99pt" Definition in eine CSS Klasse auslagern zu müssen?
@media-Definitionen fügen normalerweise keine zusätzliche Ebene der Spezifität hinzu, d.h. die letzte Angabe auf gleicher Ebene wird genommen. Wenn Du sicher gehen willst, dass die margin-Angabe übernommen ist, gebe ihr ein !important hinter dem Attributwert mit.
Gruß, LX
Hi,
Das kann Dir leider keiner genau sagen, deswegen ja auch der Alternativvorschlag mit dem PDF.
Die wichtigsten Tabellen wurden auf diese Art & Weise bereits konvertiert. Aber die Datenbank besteht halt als über 20000 Dokumenten mit vielen Hunderten Tabellen und Bildern. Da den Überblick zu bewahren ist halt schwierig :/
window.onload = function(o) { return function() {
if (o) { o(); }
if (!document.all || window.XMLHttpRequest) { return; // IE6 only }
var stylediv = document.createElement('div');
stylediv.innerHTML = '<div>IE...</div><style type="text/css">@media print { zoom: '+(800/(document.documentElement.clientWidth||800))+'; }</style>';
document.getElementsByTagName('head')[0].appendChild(stylediv.getElementsByTagName('style')[0]);
}}(window.onload);
Juhuu, cool, das sieht toll aus :-) Ich erlaube mir ein paar Fragen dazu:
1\.) document.all kann nur der IE?
2\.) Wieso nicht navigator.appVersion o.ä.?
3\.) Kann ichs nicht einfacher machen, indem ich einfach dem \*body\* Element die von dir genannte style Eigenschaft zuweise? Also so:
~~~javascript
...
if (o) { o(); }
if (!document.all || window.XMLHttpRequest) { return; // IE6 only }
document.getElementsByTagName('body')[0].style.zoom = (800/(document.documentElement.clientWidth||800));
4.) Wieso erstellst du dynamisch einen div? In diesem div sollte ja eigentlich der Inhalt der Seite (siehe (2)) stehen - oder?
» dass Du nicht im Quirks-Mode bist (ansonsten bitte document.body.clientWidth verwenden und zum Schämen in die Ecke stellen).
Ja, ich schäme mich mal. In die Ecke stell' ich mich aber erst wenn du mir sagst was das Problem ist, wenn ich in meinem Fall (=Daten die definitiv nur im IE Control angezeigt werden) den Quirks Modus verwende.
Ich möchte dass die Anwendung so gut wie möglich abwärtskompatibel ist - also wenns geht auch noch unter IE4 darstellt.
Und: Quirks habe ich ja nur wenn ich keine DTD verwende oder? siehe meine nächste Frage :)
Traurige Wahrheit: der IE ignoriert den Inhalt einer DTD komplett, solange die Doctype-Definition nur vorhanden und nicht mit einer vorangestellten XML-Deklaration versehen ist.
Aber XML Deklaration brauch ich doch nur wenn ich XHTML verwende?! Das versteh' ich jetzt eigentlich nichts ganz.
Meine Frage bleibt aber: Was ist für meinen Fall am besten? Eine DTD verwenden? Wenn ja, welche?
Wenn ein IE4, IE5 eine DTD Angabe bekommt dann ignoriert er sie ja ohnehin, aber ein IE6/IE7/IE8 verhält sich dann eben nicht mehr gleich wie seine Vorgänger oder? --> Also nichts = Quirks...
» Damit orientiert sich die Darstellung immer an der Style-Angabe.
Danke!
Wenn Du sicher gehen willst, dass die margin-Angabe übernommen ist, gebe ihr ein !important hinter dem Attributwert mit.
Danke auch das geht!
Vielen Dank! Eigentlich hast du mir schon mal sehr weitergeholfen. Auf den ersten Blick scheint das schon mal zu funktionieren, die width:-Eigenschaft der Tabellen und Bilder mit 90% !important zu überschreiben...
LG
Peter
Hallo, Peter!
1.) document.all kann nur der IE?
...und der Opera, aber der hat ein natives XMLHttpRequest-Objekt, welches dem IE6 fehlt; alternativ kann man noch auf !window.opera prüfen, dann sind aber neuere IE-Versionen auch mit im Boot.
2.) Wieso nicht navigator.appVersion o.ä.?
Weil diese Angabe nicht immer zuverlässig ist.
3.) Kann ichs nicht einfacher machen, indem ich einfach dem *body* Element die von dir genannte style Eigenschaft zuweise? (...)
Kannst Du schon, aber dann bezieht sich die Angabe nicht ausschließlich aufs Drucken, sondern auf die gesamte Darstellung
4.) Wieso erstellst du dynamisch einen div? In diesem div sollte ja eigentlich der Inhalt der Seite (siehe (2)) stehen - oder?
Ich verwende das div, um den eigentlichen Style-Tag so zu erstellen, dass es im Notfall auch browserübergreifend funktionieren würde. Erstens ignorieren viele Browser wahlweise die innerHTML- oder innerText-Eigenschaft eines style-Elements. Der IE6 hat zusätzlich leider die nervige Angewohnheit, das Style-Tag im innerHTML nur dann überhaupt zu erstellen, wenn vorher ein block-Element (bspw. ein div) mit Inhalt im HTML-Code steht, daher dieses scheinbar komplizierte Konstrukt.
» dass Du nicht im Quirks-Mode bist (ansonsten bitte document.body.clientWidth verwenden und zum Schämen in die Ecke stellen).
Ja, ich schäme mich mal. In die Ecke stell' ich mich aber erst wenn du mir sagst was das Problem ist, wenn ich in meinem Fall (=Daten die definitiv nur im IE Control angezeigt werden) den Quirks Modus verwende.
Der Quirks-Mode bringt hauptsächlich Formatierungsprobleme (falsches Box-Modell) mit sich, aber auch JS-Probleme, da dann bestimmte Eigenschaften an einer veralteten Stelle stehen. Heutzutage sollte man den Quirks-Mode überhaupt nicht mehr nutzen, es sei denn, man hat einen konkreten Vorteil davon.
Ich möchte dass die Anwendung so gut wie möglich abwärtskompatibel ist - also wenns geht auch noch unter IE4 darstellt.
Wie ich bereits in einem früheren Posting gesagt habe: wer einen IE4 in freier Wildbahn antrifft, sollte ihn für ein Kuriositätenkabinett einfangen. Wer so weit geht, einen derartigen Browser noch ernsthaft benutzen zu wollen, bekommt den Internetzugang vermutlich auch über Brieftaube oder Rauchzeichen.
Aber XML Deklaration brauch ich doch nur wenn ich XHTML verwende?! Das versteh' ich jetzt eigentlich nichts ganz.
Nur wenn Du striktes XHTML produzieren willst; transitional ist auch ohne xml-Deklaration valide.
Meine Frage bleibt aber: Was ist für meinen Fall am besten? Eine DTD verwenden? Wenn ja, welche?
<!doctype html>
Fertig.
Gruß, LX
Hi,
3.) Kann ichs nicht einfacher machen, indem ich einfach dem *body* Element die von dir genannte style Eigenschaft zuweise? (...)
Kannst Du schon, aber dann bezieht sich die Angabe nicht ausschließlich aufs Drucken, sondern auf die gesamte Darstellung
Das versteh ich nicht; wieso? Ich füge ja extra ein @media print ein, das NUR für den Ausruck gilt oder?!
Weiters: Der CSS Code den du anlegst, spezifiziert keinen Tag etc.: Heisst das dann, dass das Zoomlevel einfach für alle Elemente gilt?
Danke nochmals!
LG
Peter
In inline-styles wird @media meines Wissens nicht verstanden, da es zum Selektor gehört und nicht zu den Attributen.
Gruß, LX
Hi,
window.onload = function(o) { return function() {
if (o) { o(); }
if (!document.all || window.XMLHttpRequest) { return; // IE6 only }
var stylediv = document.createElement('div');
stylediv.innerHTML = '<div>IE...</div><style type="text/css">@media print { zoom: '+(800/(document.documentElement.clientWidth||800))+'; }</style>';
document.getElementsByTagName('head')[0].appendChild(stylediv.getElementsByTagName('style')[0]);
}}(window.onload);
Leider muss ich nochmal nachfragen. Ich habs jetzt einfach ausprobiert, aber er schneidet noch immer ab :-( (und zwar sowohl IE8 als auch IE6).
Zum Debugging mache ich ein alert(stylediv.innerHTML). Dabei ist mir aufgefallen, dass der zoom Wert immer konstant auf 0.796812749003984 steht. Egal ob es eine horizontale Scrollleiste gibt oder nicht.
Kann es sein dass document.body.clientWidth nur die Pixelanzahl des tatsächlich sichbaren angibt? Angenommen es existiert eine Scrollleiste, wie erhalte ich diese Breite dann?
Und dann hab ich noch ein fundamentales Problem: Der IE8 scheint den zoom wenigstens zu interpretieren - der Ausdruck wird etwas kleiner dargestellt.
Den IE6 (obwohl die Zoomberechnung hier etwas von 0.8 rausbringt) scheint das gar nicht kümmern. Der Druck sieht nicht nach einem gezoomten aus und auch von einer Tabelle mit 3 Spalten wird ab der 1.5en Spalte einfach alles abgeschnitten.
Ich werd' immer grantiger und verzweifelter. Wie kann man nur sowas programmieren?! Das is' ja echt kriminell :(
LG
Peter
Kann es sein dass document.body.clientWidth nur die Pixelanzahl des tatsächlich sichbaren angibt? Angenommen es existiert eine Scrollleiste, wie erhalte ich diese Breite dann?
http://de.selfhtml.org/javascript/objekte/all.htm#offset_width@title=offsetWidth