Opera-Bug? mit javascript und css
trunx
- browser
Hallo Forum,
folgendes Stück Code funktioniert in anderen (modernen) Browsern ohne Probleme (es soll sich lediglich ein kleines Bild bewegen, das Bild ist nur jetzt für Testzwecke ein Inline-Bild, im IE sieht man trotzdem, dass der Code funktionert) - im Opera verschwindet dagegen das Bild:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Opera-Bug?</title>
<style type="text/css">
html, body { width: 100%; height: 100%; margin: 0; padding: 0; border: 0; }
#box1 { position:absolute; top: 10px; left: 20px; height: 30%; min-height: 200px; width: 90%; min-width: 750px; }
#box2 { position:absolute; bottom: 0px; left: 20%; height: 150px; width: 65%; min-width: 540px; }
#box3 { position:absolute; top: 0px; left: 0px; height: 20px; width: 20px; }
</style>
<script type="text/javascript" language="JavaScript">
function bild() {
var obj=null;
if(document.all) { obj=document.all.box3; }
else if(document.getElementById) { obj=document.getElementById('box3'); }
var bt = parseInt(obj.style.top+0);
if(bt>=130) { obj.style.top=130+"px"; }
else { obj.style.top = bt+2+"px";
window.setTimeout("bild()",5); } }
</script>
</head>
<body onload="bild()">
<div id="box1"><div id="box2">
<div id="box3"><img src="data:image/gif;base64,
R0lGODlhFAAUAIAAAAAAAP///yH5BAAAAAAALAAAAAAUABQAAAIRhI+py+0Po5y02ouz3rz7rxUAOw=="
alt="" border="0" height="20" width="20">
</div>
</div></div>
</body>
</html>
Nun meine Frage: ist das tatsächlich ein Bug oder habe ich irgendwas falsch gemacht? Hatte jemand von euch mal ähnliche Probleme oder weiß sonst irgendwie wie man den Fehler beheben könnte? Ich bin halb am Verzweifeln und wär super dankbar für Hilfe...
also vielen Dank schon mal im Voraus
bye trunx
Hallo,
Nun meine Frage: ist das tatsächlich ein Bug oder habe ich irgendwas falsch gemacht?
Mit Opera 9.63 schaut es bei mir aus wie unter Firefox. Opera 9.27 läßt tatsächlich das Bild verschwinden, also wohl ein Bug.
Grüsse
Cyx23
Hallo
... also wohl ein Bug.
ja, das dachte ich mir fast...hast du ne Ahnung wie man speziell für Opera vllt javascript ausschalten kann? Obwohl - vllt frage ich einfach den userAgent ab und bewege das Bild halt in Opera nicht...
ok, vielen Dank erstmal
trunx
[latex]Mae govannen![/latex]
Fehlerhaftes Verhalten mit mehreren Versionen < 9.5 bestätigt.
ja, das dachte ich mir fast...hast du ne Ahnung wie man speziell für Opera vllt javascript ausschalten kann? Obwohl - vllt frage ich einfach den userAgent ab und bewege das Bild halt in Opera nicht...
Nein, userAgent ist keine gute Lösung, der lügt wie gedruckt ^^ . Teste stattdessen auf z.B. window.opera
Ansonsten kannst du die Abfrage auf document.all komplett entfernen, es sei denn, du willst noch IE4! unterstützen. Ab IE5 reicht document.getElementById. Das language="javascript" ist ebenfalls unnötig und kann entfernt werden.
Cü,
Kai
[latex]Mae govannen![/latex]
Nein, userAgent ist keine gute Lösung, der lügt wie gedruckt ^^ . Teste stattdessen auf z.B. window.opera
.. um neuere Operas nicht auszuschließen z.B. in Verbindung mit z.B. document.compareDocumentPosition oder window.postMessage
Cü,
Kai
Hallo,
so, ich habe nun folgende Lösung gefunden: ich verstecke das Bild, verschiebe es und zeige es danach wieder, dann klappts bei mir...der code sieht also wie folgt aus:
...
<script type="text/javascript">
function bild() {
var obj=null;
if(obj=document.getElementById('box3')) {
var bt = parseInt(obj.style.top+0);
if(bt>=130) { obj.style.top=130+"px"; }
else {
obj.style.visibility="hidden";
obj.style.top = bt+2+"px";
obj.style.visibility="visible";
window.setTimeout("bild()",5);
} } }
</script>...
so sollte es gehen... nochmal Danke an alle
bye trunx
bye trunx
Nein, userAgent ist keine gute Lösung, der lügt wie gedruckt ^^ . Teste stattdessen auf z.B. window.opera
Wieso sollte window.opera zuverlässiger sein als navigator.userAgent? (Ich schiele mit der Frage eher auf deinen Rat zum Testen der Version über unbeteiligte Drittobjekte anstatt über navigator.appVersion.)
Unter welchen Umständen genau lügt navigator in diesem Fall?
Mathias
[latex]Mae govannen![/latex]
Nein, userAgent ist keine gute Lösung, der lügt wie gedruckt ^^ . Teste stattdessen auf z.B. window.opera
Wieso sollte window.opera zuverlässiger sein als navigator.userAgent? (Ich schiele mit der Frage eher auf deinen Rat zum Testen der Version über unbeteiligte Drittobjekte anstatt über navigator.appVersion.)
Unter welchen Umständen genau lügt navigator in diesem Fall?
Ich weiß es jetzt nicht genau, aber ich meine, Cybaer hätte diesbezüglich mal einen Test gemacht, in dem auch dieser Wert durch einen falschen UA neu gesetzt wurde, ob das auf IE beschränkt war oder Opera (oder andere Browser) beinhaltete, kann ich jetzt nicht sagen. Ist mir ehrlich gesagt jetzt auch zu spät, danach zu suchen oder es zu testen.
Jedenfalls war da mal was, oder ich irre mich komplett. "Meine" Methode ist auch nicht ideal, das ist mir durchaus bewußt, aber zumindest ist es auf diese Weise _relativ_ sicher, Opera zu erkennen. (Besswer wäre wahrscheinlich noch, keinen ineninander verschachtelten positionierten Elemente zu benutzen, um den Opera-Bug gar nicht erst zu triggern.
Cü,
Kai
Hallo,
vielen Dank für die Tipps,
Besser wäre wahrscheinlich noch, keine ineinander verschachtelten positionierten Elemente zu benutzen, um den Opera-Bug gar nicht erst zu triggern.
das werde ich erstmal versuchen anders zu lösen, aber vermutlich wird es dabei bleiben...ansonsten halt die älteren Operas ausschließen.
also Danke nochmal, wenn ich die Lösung habe, poste ich es hier
ciao trunx
Unter welchen Umständen genau lügt navigator in diesem Fall?
Ähm, dumme Frage, natürlich in dem (unwahrscheinlichen) Fall, dass man »als Firefox/Internet Explorer maskieren« einstellt.
Worauf ich hinaus wollte war eher, wieso man nicht einfach Einrichtungen wie window.opera.version() nutzt.
Mathias