Opera7 und innerHTML
Chräcker Heller
- javascript
Hallo,
zuerst: ja, der opera7 kann innerHTML. Schlimmer noch, er kann sogar .all, weswegen er von meinen Scripten brav in die IE-bereiche gelozt wird. Geschieht ihm aber vielleicht auch recht, schlieslich tarnt er sich per default ja auch als solchen. (Das sollten die sich endlich mal anders überlegen....)
Wie dem auch sei: Habe ich bei folgendem Problem einen Fehler gemacht, oder darf ich es auf das Beta hinter der 7 schliessen? Ich lese per innerHTML den inhalt eiens Div-Bereiches aus:
inhalt=document.getElementById("test").innerHTML;
dann erweitere ich den Bereich um ein div weiteres, nun also im ersten liegend:
document.getElementById("test").innerHTML=inhalt+"<div style="position:absolute; top: 20px; left: 0px;
Dabei verliert Opera die style-Angaben, ein alert bringt es dann an den Tag. Ein neuerliches innerHTML bringt mir, wenigstens namenskonsequent, nur das html zurück, nicht das CSS. (wodurch die Positionierungen eben flöten gehen....)
Live zu sehen unter: http://www.chraecker.de/forum/opera-test.html, beim mozilla nur ohne Popupblocker, weil der alerts mitblockt.... aber unter mozilla funktioniert es ja auch ,-))
Hier noch mal der Code der Testseite. (Aufgerufen durch ein onload im body-tag....)
__________
function init(){
inhalt=document.getElementById("test").innerHTML;
document.getElementById("test").innerHTML=inhalt+"<div style="position:absolute; top: 20px; left: 0px; ">wo ist das style geblieben?</div>";
alert (document.getElementById("test").innerHTML);
__________
...und im body ein Div namens test:
<div id="test" style="position:absolute; top: 0px; left: 0px; z-index:1;">kleiner Test</div>
Chräcker
Hallo Chräcker,
zuerst: ja, der opera7 kann innerHTML. Schlimmer noch, er
kann sogar .all, weswegen er von meinen Scripten brav in
die IE-bereiche gelozt wird. Geschieht ihm aber vielleicht
auch recht, schlieslich tarnt er sich per default ja auch
als solchen. (Das sollten die sich endlich mal anders
überlegen....)
Ehm, das hat der Opera 5 und 6 auch schon getan ;) Die einzige Moeglichkeit, einen Opera wirklich zu erkennen, ist ein
if(window.opera) {
alert("You're using an opera!");
}
:)
Wie dem auch sei: Habe ich bei folgendem Problem einen
Fehler gemacht, oder darf ich es auf das Beta hinter der 7
schliessen?
[... JavaScript-Code ...]
IMHO ist das ein Bug. Solltest du vielleicht melden :)
Gruesse,
CK
Hallo,
Ehm, das hat der Opera 5 und 6 auch schon getan ;) Die einzige
Moeglichkeit, einen Opera wirklich zu erkennen, ist einif(window.opera)
So mache ich es ja auch. Es war auch mehr eine "politische" Feststellung. Scheibar möchte Opera per default keine positionen in den Browser Statistiken erreichen.....
IMHO ist das ein Bug. Solltest du vielleicht melden :)
...oh Hilfe, bei meinen Englischkenntnissen, na mal sehen, wie ich das hinbekomme ;-)
Danke!
Chräcker
Hallo, Chräcker,
... schlieslich tarnt er sich per default ja auch
als solchen [MSIE]. (Das sollten die sich endlich mal anders
überlegen....)
Scheibar möchte Opera per default keine positionen in den Browser Statistiken erreichen.....
Auch wenn Opera sich als MSIE identifiziert, sendet er "hintendran" am User-Agent-Header einen Zusatz, welcher eine eindeutige Opera-Kennung enthält:
-->8--
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.05 [en]
\__________________________________________/ \_____________/
Browserkennung von MSIE 5.0 Opera-Zusatz
--8<--
Im Bezug auf document.all hast du natürlich recht, aber in den Statistiken taucht Opera durchaus als solcher auf, da die Logauswertungsprogamme nach Opera im User-Agent-Header suchen und sich nicht von "MSIE 5.0" narren lassen...
Opera möchte natürlich Verbreitung finden, aber ich denke eher, dass es hier um Kompatibilität geht, da das Web von Seiten beherrscht ist, welche in erster Linie die Microsoft'sche DHTML-Syntax verwenden und bislang war Operas DOM-Unterstützung auch nicht sonderlich herausragend.
Mathias
Hallo,
Dabei verliert Opera die style-Angaben, ein alert bringt es dann an den Tag. Ein neuerliches innerHTML bringt mir, wenigstens namenskonsequent, nur das html zurück, nicht das CSS. (wodurch die Positionierungen eben flöten gehen....)
Nein, er verliert die Styles des neuen DIVs nicht, wie z. B. die Angabe 120px zeigt oder ein zusaetzliches color: #F00;
Es wird zwar kein style-Attribut(wert) angezeigt, aber teste mal
alert(document.getElementById("test").childNodes[1].tagName+": "+document.getElementById("test").childNodes[1].getAttribute("style"));
mit dem Ergebnis: "DIV: [object CSSStyleDeclaration]"
Also werden die Inline-Styles offenbar in die Stylesheet-Collection aufgenommen.
MfG, Thomas
Hallo,
mit dem Ergebnis: "DIV: [object CSSStyleDeclaration]"
hüstel, also: ich will auch mal faul sein ;-): wie komme ich jetzt an die Stylewerte dran? Also an die "definitive" top und left-Position?
Außerdem ein kleines mürrisches: na Klasse, also interpretiert der opera innerHTML tatsächlich wortwörtlich, und man darf nun sein Javascript weiter auffächern. (jaja, ich könnte auch alles nach DOM2 umschreiben, vielleicht sollte ich das mal machen. Fliegt nur dummerwiese der NS4 raus und der IE öfters aus der Kurve.... und was bei Opera dann noch alles pasieren wird....)
Ansonsten natürlich erst einmal ein dickes Danke!
Chräcker
Moin!
Hallo,
mit dem Ergebnis: "DIV: [object CSSStyleDeclaration]"
hüstel, also: ich will auch mal faul sein ;-): wie komme ich jetzt an die Stylewerte dran? Also an die "definitive" top und left-Position?
ELEMENT.styles.top
ELEMENT.styles.left
Würde ich jedenfalls mal so sagen. Für ELEMENT nimmst du halt irgendein passendes getIrgendwasByIrgendwas(..).
- Sven Rautenberg
Hallo,
hüstel, also: ich will auch mal faul sein ;-): wie komme ich jetzt an die Stylewerte dran? Also an die "definitive" top und left-Position?
Bezogen auf Dein Beispiel:
document.getElementById("test").childNodes[1].style.top
document.getElementById("test").childNodes[1].style.left
MfG, Thomas
Hallo,
Danke Euch beiden. Jaha, da hätte ich drauf kommen können, aber ich wollte doch auch mal Zeit sparen ,-)))
Chräcker