Opera, Javascript und Bilder dynamisch in neue Fenster laden
Boris Stumpf
- browser
Hallo allerseits,
hatte ein Problem zu Opera (5.02) mit neuem Fenster, das per Javascript (window.open) geöffnet und in das dynamisch ein Hintergrundbild geladen werden soll. Bin im Forumsarchiv Juni 2001 fündig geworden. Dort haben sich einige Tüftler schon mit eben diesem Problem beschäftigt. Nach viel Herumprobieren mit den dort gefundenen Ideen habe ich mein Skript jetzt zum Laufen gebracht. Dafür Dank an alle, die dazu beigetragen haben (urspr. 'Opera: Bilder in neu geöffneten Fenstern, Stefan Bion, 25.06.2001).
Möchte also gerne nochmal, nach meinen aktuellen Erkenntnissen, zusammenfassen:
1. Opera benötigt im 'window.open' tatsächlich eine Angabe zu einer zu ladenden HTML-Datei:
[pwindow = window.open("http://absoluter Pfad/leer.html","","");]
In diese Datei kann man dann per 'document. write(ln)' reinschreiben.
Wichtig ist der absolute Pfad zu dieser Datei!
2. Die Bilddatei, die man z.B. als Hintergrundbild (dynamisch) in diese Datei laden will, muss ebenfalls absolut referenziert werden.
3. Es scheint mir tatsächlich so zu sein, dass Opera das Bild dann aber erst anzeigen kann, wenn es im Cache ist. Könnte sich also anbieten, das gewünschte Bild in der aufrufenden HTML-Datei vorzuladen.
Da die anderen Browser damit gar keine Probleme haben und das Pfad-Gehubere nicht brauchen, frage ich in meinem Skript vorher den Browser ab und backe nur für Opera dieses Extrawürstchen. Um dabei die mögliche Maskierung von Opera als 'anderer' Browser zu umgehen, muss man die Eigenschaft 'navigator.userAgent' verwenden. Im zurückgelieferten String befindet sich bei Opera immer irgendwo die Teil-Zeichenkette 'Opera'. Über eine 'string.indexOf'-Auswertung ermittelt man, ob dieser Teilstring (Vorsicht: großes 'O'!) vorkommt. Wenn das Ergebnis '-1' ist, ist es NICHT Opera.
[ if(string.indexOf("Opera",0) == -1){...alle anderen Browser}else{...Opera} ]
Bei meinem Skript scheint also jetzt alles halbwegs zu funktionieren (uff...), wer will, kann sich's ja mal ansehen unter:
http://www.xpw18.de/grafik/backgrounds.html
Merkwürdig bleibt dabei nur noch:
Beim ersten Klick auf eine der Hintergrundkacheln bleibt das Fensterchen leer, wenn man nochmal eine Kachel anklickt, gehts dann. Vielleicht der Cache-Effekt?
Was mich daran zum Grunzen ärgert, ist, dass es sich bei all dem eigentlich um olles Standard-Javascript handelt, und Opera ist mittlerweile bei 5.x angekommen. Zur Strafe müsste man dafür eigentlich eine Rücksetzung auf Versionsnummer 0.9 verordnen und für das völlig überflüssige Gebastel ein dicke Rechnung an Operasoft schicken....(und gleich noch weitere Rechnungen an die anderen auch MS, NS usw. für das Gefummel, was einem deren fehlerhafte Softwarebrocken aufzwingen).
Nochmals Dank an alle aus der Juni-2001-Diskussion.
Grusz,
/boris
hi Boris,
- Opera benötigt im 'window.open' tatsächlich eine Angabe zu einer zu ladenden HTML-Datei:
[pwindow = window.open("http://absoluter Pfad/leer.html","","");]
hast du schon mal beim Pfad ./../../leer.htm versucht. Wenn im gleichen Verzeichnis dann nur ./leer.htm
gruss
René
Hallo !
Ha! Schon wieder einer, der den Opera schlecht machen will! Da fühle ich mich zum Anwalt berufen. >:)
Die von dir beschriebenen Probleme mit Opera 5.02 kann ich mit Opera 5.12 nicht bestätigen. Eventuell treten diese nur 'online' auf, was ich nicht geprüft habe, aber auch nicht annehme.
In dem von dir genannten Archivthread http://forum.de.selfhtml.org/archiv/2001/6/25928/ hatte Antje ja bereits eine Zusammenfassung geliefert.
Die Ausgangsfunktion
var w = open("", "bla", "width=300,height=200")
sollte demnach lediglich so abgeändert werden:
var w = window.open("leer.html", "bla", "width=300,height=200")
Mehr war nicht.
- Opera benötigt im 'window.open' tatsächlich eine Angabe zu einer zu ladenden HTML-Datei:
[pwindow = window.open("http://absoluter Pfad/leer.html","","");]
Opera wollte als URI ein URI haben und nicht einen Leerstring.
Skandal! =:o
In diese Datei kann man dann per 'document. write(ln)' reinschreiben.
Wichtig ist der absolute Pfad zu dieser Datei!
Davon weiß ich nichts. Bei Opera 5.12 nicht.
- Die Bilddatei, die man z.B. als Hintergrundbild (dynamisch) in diese Datei laden will, muss ebenfalls absolut referenziert werden.
Dass sich bei Angabe eines Pfades zur 'leer.html' die darin enthaltenen Bilder nach deren URI orientieren ist nur konsequent.
- Es scheint mir tatsächlich so zu sein, dass Opera das Bild dann aber erst anzeigen kann, wenn es im Cache ist. Könnte sich also anbieten, das gewünschte Bild in der aufrufenden HTML-Datei vorzuladen.
Dass die Bilder erst angezeigt werden, wenn sie geladen sind, versteht sich von selbst. Ein "Vorladen" der Bilder ist bei Opera 5.12 sicher nicht erforderlich.
Da die anderen Browser damit gar keine Probleme haben und das Pfad-Gehubere nicht brauchen, frage ich in meinem Skript vorher den Browser ab und backe nur für Opera dieses Extrawürstchen.
Das verstehe ich jetzt gar nicht. Haben denn die anderen Browser ein Problem mit der ggf. absoluten Adressierung der leer.html oder der Bilder? Das sollte mich aber verwundern.
Um dabei die mögliche Maskierung von Opera als 'anderer' Browser zu umgehen, muss man die Eigenschaft 'navigator.userAgent' verwenden. Im zurückgelieferten String befindet sich bei Opera immer irgendwo die Teil-Zeichenkette 'Opera'. Über eine 'string.indexOf'-Auswertung ermittelt man, ob dieser Teilstring (Vorsicht: großes 'O'!) vorkommt. Wenn das Ergebnis '-1' ist, ist es NICHT Opera.
[ if(string.indexOf("Opera",0) == -1){...alle anderen Browser}else{...Opera} ]
Dolle Sache, aber so überflüssig wie ein Kropf.
Bei meinem Skript scheint also jetzt alles halbwegs zu funktionieren (uff...), wer will, kann sich's ja mal ansehen unter:
http://www.xpw18.de/grafik/backgrounds.html
Tut es. Allerdings wartet mein Mozilla noch immer darauf, dass irgendetwas in den Body geschrieben wird. Ein würde ihm, glaube ich, schon genügen.
Merkwürdig bleibt dabei nur noch:
Beim ersten Klick auf eine der Hintergrundkacheln bleibt das Fensterchen leer, wenn man nochmal eine Kachel anklickt, gehts dann. Vielleicht der Cache-Effekt?
Dieses Phänomen konnte ich in keinem meiner Browser beobachten.
Was mich daran zum Grunzen ärgert, ist, dass es sich bei all dem eigentlich um olles Standard-Javascript handelt,
Das hast du recht, dass ist "olles" JavaScript, was Opera (zumindest 5.12) aber auch problemlos erledigt hat.
und Opera ist mittlerweile bei 5.x angekommen. Zur Strafe müsste man dafür eigentlich eine Rücksetzung auf Versionsnummer 0.9 verordnen
Mir will scheinen, du bist nicht ganz auf der Höhe der Zeit. Die aktuelle Opera-Version ist 6!
Mit diesem geht es dann auch so:
opener.html
---------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<title>Opener</title>
<script type="text/javascript">
<!--
function oeffnen2(bildname)
{
var w = window.open("window2.html","cover","width=400,height=350,left=100,top=30");
w.document.getElementById("bilddiv").style.backgroundImage = "url("+bildname+".jpg)";
w.focus();
}
//-->
</script>
<p>
<a href="javascript:oeffnen2('bild1')">Bild 1</a><br>
<a href="javascript:oeffnen2('bild2')">Bild 2</a><br>
<!-- und so weiter und so fort -->
</p>
---------------------------------------------------------------------
(nicht sonderlich ausgereift, ich weiß. Aber es läuft.)
weiter2.html
---------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<title id="Titel">Bild</title>
<style type="text/css">
html { height: 100%; }
body { height: 100%;
margin:0;
padding:0;
}
#bilddiv { width: 100%;
height:100%;
}
</style>
<div id="bilddiv">
</div>
---------------------------------------------------------------------
Modernste Technik nach DOM, die sonst scheinbar nur noch mein IE 6 beherrscht! :-)
Mozilla 0.9.6 will mir einreden, 'bilddiv' habe keine Eigenschaften. :-(
Ein direktes Ansteuern eines BODY-Hintergrundbildes im Zweitfenster wollte mir allerdings beim besten Willen nicht gelingen. Daher der Umweg über das DIV.
...und für das völlig überflüssige Gebastel ein dicke Rechnung an Operasoft schicken....(und gleich noch weitere Rechnungen an die anderen auch MS, NS usw. für das Gefummel, was einem deren fehlerhafte Softwarebrocken aufzwingen).
Dieses Problem kenn ich doch irgendwoher. Nur würde ich die dickste Rechnung woanders hinschicken, nicht nach Norwegen. :-)
Gruß,
kerki
Hallo kerki!
Bevor Du uns weiszumachen versuchst, wie toll Opera in Sachen JavaScript ist, unterhalte Dich mal mit Antje darüber.
;-)
Patrick
Hallo !
Ha! Schon wieder einer, der den Opera schlecht machen will! Da fühle ich mich zum Anwalt berufen. >:)
Will ich doch gar nicht. Warum etwas schlecht machen wollen, wenn's eh schon schlecht ist, UND DAS gilt natürlich für ALLE Browser. Denn im Grunde taugen sie alle nichts - zumindest nicht an ihrem Anspruch gemessen, der jeweils Beste zu sein, und jetzt noch großartiger usw. Sie beherrschen größtenteils ja noch nicht einmal vollständig HTML 4.0 (1996/97)! Auf Opear übrigens halte ich eigentlich schon große Stücke, auch wenn mir dessen Fenstertechnik persönlich nicht liegt.
Die von dir beschriebenen Probleme mit Opera 5.02 kann ich mit Opera 5.12 nicht bestätigen. Eventuell treten diese nur 'online' auf, was ich nicht geprüft habe, aber auch nicht annehme.
Das ist ja der Witz: offline hat's bei mir auch mit relativen Pfaden funktioniert, online nicht!
(...)
Die Ausgangsfunktion
var w = open("", "bla", "width=300,height=200")
sollte demnach lediglich so abgeändert werden:
var w = window.open("leer.html", "bla", "width=300,height=200")
Mehr war nicht.
Das, s.o., funktioniert bei mir offline, nicht aber online. Wobei die in diese Datei zu ladende Bilddatei in einem Unterverzeichnis liegt, also ./img/bla.gif oder img/bla.gif.
- Opera benötigt im 'window.open' tatsächlich eine Angabe zu einer zu ladenden HTML-Datei:
[pwindow = window.open("http://absoluter Pfad/leer.html","","");]
Opera wollte als URI ein URI haben und nicht einen Leerstring.
Skandal! =:o
Eigentlich schon, den der URI-String ist optional, genau wie die weiteren Strings für Name und Merkmale. Darf also auch ein leerer String sein: x=window.open("","","").
In diese Datei kann man dann per 'document. write(ln)' reinschreiben.
Wichtig ist der absolute Pfad zu dieser Datei!
Davon weiß ich nichts. Bei Opera 5.12 nicht.
Ist meine Erfahrung mit dem 5.02....
(...)
Da die anderen Browser damit gar keine Probleme haben und das Pfad-Gehubere nicht brauchen, frage ich in meinem Skript vorher den Browser ab und backe nur für Opera dieses Extrawürstchen.
Das verstehe ich jetzt gar nicht. Haben denn die anderen Browser ein Problem mit der ggf. absoluten Adressierung der leer.html oder der Bilder? Das sollte mich aber verwundern.
Nö, anfangs dachte ich beim Basteln, dass ich solch eine Abfrage brauche. Jetzt, bei dem ermittelten Ergebnis, hast du schon recht, kann ich mir auch sparen...
Um dabei die mögliche Maskierung von Opera als 'anderer' Browser zu umgehen, muss man die Eigenschaft 'navigator.userAgent' verwenden. Im zurückgelieferten String befindet sich bei Opera immer irgendwo die Teil-Zeichenkette 'Opera'. Über eine 'string.indexOf'-Auswertung ermittelt man, ob dieser Teilstring (Vorsicht: großes 'O'!) vorkommt. Wenn das Ergebnis '-1' ist, ist es NICHT Opera.
[ if(string.indexOf("Opera",0) == -1){...alle anderen Browser}else{...Opera} ]
Dolle Sache, aber so überflüssig wie ein Kropf.
Für diese Sache schon, s.o. - könnte aber für andere Fragen hilfreich sein, z.B. wenn man CSS2 einsetzt und hier die optimale Lösung für Opera verwenden will und die anderen Browser auf eine weniger 'moderne' Lösung umleiten will, denn da hat Opera den anderen Gurken ja einiges Gutes voraus.
Bei meinem Skript scheint also jetzt alles halbwegs zu funktionieren (uff...), wer will, kann sich's ja mal ansehen unter:
http://www.xpw18.de/grafik/backgrounds.html
Tut es. Allerdings wartet mein Mozilla noch immer darauf, dass irgendetwas in den Body geschrieben wird. Ein würde ihm, glaube ich, schon genügen.
Habe ich auch heute morgen bemerkt. Vergessen. Sorry.
Merkwürdig bleibt dabei nur noch:
Beim ersten Klick auf eine der Hintergrundkacheln bleibt das Fensterchen leer, wenn man nochmal eine Kachel anklickt, gehts dann. Vielleicht der Cache-Effekt?
Dieses Phänomen konnte ich in keinem meiner Browser beobachten.
Ist bei mir offline wie online so. Ich versteh's (noch) nicht.
(...)
Mir will scheinen, du bist nicht ganz auf der Höhe der Zeit. Die aktuelle Opera-Version ist 6!
Jou. Mache aber nie (bei keiner Software) sofort jedesmal jeden Versionssprung mit. Ich käme ja kaum noch zum Arbeiten...
(...)
...und für das völlig überflüssige Gebastel ein dicke Rechnung an Operasoft schicken....(und gleich noch weitere Rechnungen an die anderen auch MS, NS usw. für das Gefummel, was einem deren fehlerhafte Softwarebrocken aufzwingen).
Dieses Problem kenn ich doch irgendwoher. Nur würde ich die dickste Rechnung woanders hinschicken, nicht nach Norwegen. :-)
Nach Redmont?? Richtig, und nicht nur für den Browser! Auch für den anderen Mist, den die da verzapfen, z.B. die Virenclients Outlook/Expr. (Inlook??). Denn die haben zumindest den großen Bug, dass sie ab und zu normale Mails durchlassen ;-)
Gruß,
kerki
Gruß zurück,
/boris