Opera spielt nicht mit
Christoph Schnauß
- dhtml
hallo Forum ;-)
ich habe folgendes kleines Script:
<script language="javascript" type="text/javascript">
var pause = 0;
var obj_step = false;
var obj_speed = 0.006;
var obj_X = 0;
var obj_winkel = false;
var obj_ref = false;
function positionieren(obj_name, links, oben){
// "Browserweiche" gekürzt:
obj_ref="document.getElementById";
if (navigator.appName == "Opera"){
eval(obj_ref+'["'+obj_name+'"].style.top = oben');
eval(obj_ref+'["'+obj_name+'"].style.left = links');
} else {
eval(obj_ref+'("'+obj_name+'").style.top = oben');
eval(obj_ref+'("'+obj_name+'").style.left = links');
}
}
function bewegung() {
positionieren("frac",obj_X,0);
obj_X += obj_step;
obj_X = Math.sin(obj_winkel)*300 + 400;
obj_Y = Math.cos(obj_winkel)*250 + 280;
positionieren("frac1", obj_X, obj_Y);
obj_winkel += obj_speed;
timer = window.setTimeout("bewegung();", pause);
}
</script>
Das soll eine kleine fraktale Grafik (mit dem Namen "frac") in Ellipsenform über den Bildschirm wandern lassen und tut das auch im IE und mit mozilla/Netscape. Aber mit Opera (6) bekomme ich Probleme. Einen Teil konnte ich beheben, indem in der Funktion "positionieren" für den Objektnamen (Variable "obj_name") die eckigen Klammern bei der if-Abfrage eingesetzt wurden. Aber die Funktion "bewegung" führt Opera nicht aus und gibt leider auch keinerlei Fehlerwarnung.
"frac" wird mit CSS so formatiert:
<style type="text/css">
#frac {position: absolute; top: -100; visibility: visible }
</style>
und mit einem button von der Webseite aus so aufgerufen:
<input type="button" value="Animation starten" onclick="bewegung()">
Wie bereits angeführt, machen mozilla/Netscape und Internet Explorer ohne weitere Bemerkungen mit, nur Opera kann ich nicht dazu bewegen. Daß auch Netscape 4.7x nicht mitspielen mag, ist mir wurscht. Netscape 4.7x velangt ebenfalls die eckigen Klammern, die ich mit einer weiteren if-Abfrage ins Script schreiben müßte, aber auch wenn das drinsteht, spielt er nicht mit und stellt komischerweise auf der Javascript-Konsole auch keine Fehlermeldung bereit. Übrigens mag auch der Konqueror (3) nicht mitmachen.
Hat jemand nen Hinweis, wie ich diese "kleineren" Browser dazu bewegen kann, mein Script richtig auszuführen? Mir geht es (erst einmal) nur um DOM-Fähige Browser, die "getElementById" verstehen.
Grüße aus Berlin
Christoph S.
Hi Christoph,
eval(obj_ref+'["'+obj_name+'"].style.top = oben');
eval(obj_ref+'["'+obj_name+'"].style.left = links');
eval(obj_ref+'("'+obj_name+'").style.top = oben');
eval(obj_ref+'("'+obj_name+'").style.left = links');
eventuell fehlt Opera hier bei der Positionierung das abschließende "px".
<style type="text/css">
#frac {position: absolute; top: -100; visibility: visible }
</style>
Probiere es hier mit top: -100px;
^^
Ist zwar ungetestet und ein Schuß in's Blaue, aber es kann durchaus daran liegen. Maßeinheiten sind nämlich niemals böse ;)
LG Orlando
--
SELF-TREFFEN 2002
http://www.rtbg.de/selftreffen/
http://www.megpalffy.org/temp/penneninhh.html
hi Orlando,
Probiere es hier mit top: -100px;
^^
Ist zwar ungetestet und ein Schuß in's Blaue, aber es kann durchaus daran liegen. Maßeinheiten sind nämlich niemals böse ;)
danke für den Hinweis - bringt leider nix, bis auf die Erinnerung, daß man beim "Zusammenstreichen" von Scripts, damit sie in ein posting passen, sehr sorgfältig vorgehen muß. Die Angabe "px" wird im Script durch eine Variable übernommen - weil es im gesamten Script auch noch "pt" gibt. Bloß das ist für meine Fragestellung unerheblich gewesen.
Wenn du Zeit dafür hast, probier das gute Stück doch mal aus.
Grüße aus Berlin
Christoph S.
Hi Christoph,
Wenn du Zeit dafür hast, probier das gute Stück doch mal aus.
gerne, aber würdest du sie bitte vollständig hochladen? Vielleicht gibt's ja noch ein Problem, das ich bisher nicht gesehen habe.
LG Orlando
--
SELF-TREFFEN 2002
http://www.rtbg.de/selftreffen/
http://www.megpalffy.org/temp/penneninhh.html
hallo ;-)
gerne, aber würdest du sie bitte vollständig hochladen? Vielleicht gibt's ja noch ein Problem, das ich bisher nicht gesehen habe.
hm, grummel, da hab ich nen Problem: das ist eine Seite aus dem "Update-Paket" meiner eigenen Adresse, und wenn ich das jetzt im alpha-Stadium alles hochlade, sind ziemlich viele noch nicht validierte Seiten dabei ... ich hab das Beispiel mal auf http://www.christoph-schnauss.de/temp/dyn01.htm abgelegt. Aber bitte: alpha-Stadium ;-)
Grüße
Christoph S.
Hi nochmal,
hm, grummel, da hab ich nen Problem: das ist eine Seite aus dem "Update-Paket" meiner eigenen Adresse, und wenn ich das jetzt im alpha-Stadium alles hochlade, sind ziemlich viele noch nicht validierte Seiten dabei ...
hast du Angst, dass dich jemand prügelt? :p
Zunächst fällt mir die gefährliche Opera-Prüfung auf:
if (navigator.appName == "Opera")
solltest du auf jeden Fall durch
if (window.opera)
ersetzen. Das ist die einzig zuverlässige Methode.
Woran es nun genau liegt, dass es nicht funktioniert, weiß ich nicht. Könnte am eval() liegen, ist leider absolut nicht mein Fachgebiet. Ich verstehe nicht ganz, warum du die eckigen Klammern für Opera benötigst,
document.getElementById('id').style.top
funktioniert nämlich.
Gute Nacht oder fohes Schaffen ;)
LG Orlando
--
SELF-TREFFEN 2002
http://www.rtbg.de/selftreffen/
http://www.megpalffy.org/temp/penneninhh.html
grüßchen ...
hast du Angst, dass dich jemand prügelt? :p
nö, aber "veröffentlichen" möchte man ja nur was, was man selber als einigermaßen fehlerfrei empfindet. Haue gibts sowieso, egal wie genial man gearbeitet hat *g*
Zunächst fällt mir die gefährliche Opera-Prüfung auf:
if (navigator.appName == "Opera")
solltest du auf jeden Fall durch
if (window.opera)
ersetzen. Das ist die einzig zuverlässige Methode.
ja, ok, ist aber subkritisch und behebt den "Fehler" nicht
document.getElementById('id').style.top
funktioniert nämlich.
oh. Bei mir (Opera 6.04) nicht. Da bekam ich einen Warnhinweis, und der verschwand erst, als ich die eckigen Klammern gesetzt hatte
Gute Nacht oder fohes Schaffen ;)
naja, mehr zweiteres ;-)
schlaf gut
Christoph S.
--
SELF-TREFFEN 2002
http://www.rtbg.de/selftreffen/
http://www.megpalffy.org/temp/penneninhh.html
hi
Probiere es hier mit top: -100px;
das sollte Opera egal sein - immerhin liefert er ja sogar die entsprechenden Werte im CSS als Integers zurück - als ohne Einheit, wenn man die über JS auslesen will.
Grüße aus Bleckede
Kai
hallo,
immerhin liefert er ja sogar die entsprechenden Werte im CSS als Integers zurück - als ohne Einheit, wenn man die über JS auslesen will.
richtig. Was mich aber wirklich verblüfft, ist, daß ich trotz der "Verweigerung" keinerlei Fehlermeldung bekomme, obwohl ich meinen Opera so eingerichtet habe, daß er Scriptfehler sofort im alert-Fenster anzeigt. Auch die Apache-logs sagen nix aus, da steht nichts drin. Trotzdem tut ers einfach nicht, und da bin ich dann einfach ratlos, weil das Teil ja mit mozilla (der doch auch ziemlich empfindlich ist und ziemlich genaue Protokolle liefert) reibungslos funktioniert - vom IE will ich gar nicht nochmal reden, der tuts natürlich.
Ich hab die Seite mal auf http://www.christoph-schnauss.de/temp/dyn01.htm abgelegt, zum Nachschauen. Script ist im Quelltext enthalten, also keine externe JS oder CSS. Ahja, und was ich zu einer "Variablen, die 'px' oder 'pt' sein kann" geschrieben hatte, ist erstmal nicht mehr drin, weil das für das eigentliche Problem unerheblich ist. Prinzipiell kenne ich das, daß Opera gerne die Maßeinheiten haben möchte, und bemühe mich normalerweise darum, das zu berücksichtigen - hatte damit bisher auch nie Probleme. Aber hier sind es in solchen Scriptzeilen wie
eval(obj_ref+'["'+obj_name+'"].style.top = oben');
eval(obj_ref+'["'+obj_name+'"].style.left = links');
lauter Variablen, die mehrfach umgefüllt und schließlich auch noch über "Math.sin" bzw. "Math.cos" dynamisch verändert werden, und ich wüßte nicht genau, wie ich da noch ein ".px" so anhängen könnte, daß es Opera mitmacht.
Grüße aus Bleckede
Grüße aus Berlin retour
Christoph S.
hi
richtig. Was mich aber wirklich verblüfft, ist, daß ich trotz der "Verweigerung" keinerlei Fehlermeldung bekomme, obwohl ich meinen Opera so eingerichtet habe, daß er Scriptfehler sofort im alert-Fenster anzeigt.
geht sowas clientseitig..?!
noch ein Vorschlag meienrseits: Verzichte komplett auf alternative Scripte für document.all oder document.layers - ich finde es ist mehr als Zeit diese Dinger von den Seiten zu kicken.
Grüße aus Bleckede
Kai
morgens,
geht sowas clientseitig..?!
du kannst bei Opera (6.04, andere hab ich nicht mehr) einstellen, daß du Scriptfehler angezeigt bekommen möchtest.
noch ein Vorschlag meienrseits: Verzichte komplett auf alternative Scripte für document.all oder document.layers - ich finde es ist mehr als Zeit diese Dinger von den Seiten zu kicken.
schon gut - die Dinger waren eh im Script auskommentiert und sind Relikte. An _dieser_ Stelle sind wir übrigens bekanntlich absolut derselben Ansicht
Grüße aus Berlin
Christoph S.
Hi Christoph,
nimm die Opera-Abfrage einfach heraus, denn
obj_ref="document.getElementById";
eval(obj_ref+'("'+obj_name+'").style.top = oben');
eval(obj_ref+'("'+obj_name+'").style.left = links');
funktioniert, habe </?m=108135&t=19226> einfach ausprobiert :)
LG Orlando
--
SELF-TREFFEN 2002
http://www.rtbg.de/selftreffen/
http://www.megpalffy.org/temp/penneninhh.html
hallo Orlando,
nimm die Opera-Abfrage einfach heraus
hab ich (offline) gmeacht. Und da passiert (auch nach Cache-Auskehren usw.) was ganz Eigentümliches: wenn ich Opera sage, er soll sich als IE oder als Netscape tarnen, kann er es plötzlich - wenn auch die timeout-Werte nicht befolgt werden und die Grafik viel zu schnell über den Screen geschossen wird. Das müßte sich aber mit Leichtigkeit einrichten lassen.
Wenn ich sage, er soll sich weiterhin stolz Opera nennen, tut ers immer noch nicht bzw. gibt mir nen alert, daß er eckige Klammern haben will. Naja, ich hab ja schon öfter erlebt, daß mein Rechner bloß mal so ein paar Stunden Schlaf brauchte, vielleicht klappt morgen (nachher) doch alles ...
besten Dank
Christoph S.