Chräcker Heller: Opera7 und innerHTML

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

  1. 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

    1. Hallo,

      Ehm, das hat der Opera 5 und 6 auch schon getan ;) Die einzige
      Moeglichkeit, einen Opera wirklich zu erkennen, ist ein

      if(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

      1. 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

        --
        "Die größten Kritiker der Elche waren früher selber welche"
        (Prof. Fritz Weigle alias F. W. Bernstein)
  2. 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

    1. 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

      1. 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

        --
        Diese Signatur gilt nur am Freitag.
      2. 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

        1. Hallo,

          Danke Euch beiden. Jaha, da hätte ich drauf kommen können, aber ich wollte doch auch mal Zeit sparen ,-)))

          Chräcker