Stefan Rosendorf: DHTML + Opera + innerHTML Alternative ??

Ich habe folgendes Problem, ich erstelle per JavaScript HTML-Code den ich in einer Variable speichere und dann anzeigen möchte. Für den IE und NS 4-6 klappt das ja ganz gut nur mit Opera habe ich so meine Probleme da der innerHTML nicht kennt.

Hier mal ein Beispielcode, kann mir einer sagen wie ich das auch unter Opera zum laufen bekomme, oder muss ich erst bis Version 7 warten ??

ach ja , die Opera-Abfrage scheint bei mir auch nicht zu funktioniere (Opera 6.01) obwohl ich die Browser Identification auf Opera gestellt habe :-/ ???

<pre>
<html>
<head>
<title>Test</title>

</head>
<body text="#000000" link="#FFFFFF" alink="#FFFFFF" vlink="#FFFFFF"">
<div id="menu" style="position:absolute;top:0px;left:0px"></div>
<script>
 if (document.all) {  // Internet Explorer
  menuecontent = "<h1>Internet Explorer</h1>";
  menu.innerHTML=menuecontent;
 }
 else if (document.layers) {  // Netscape Navigator
  menuecontent = "<h1>Netscape Navigator</h1>";
  document.menu.document.write(menuecontent)
  document.menu.document.close()
 }
 else if (document.getElementById) {  // Netscape 6
  menuecontent = "<h1>Netscape 6.x</h1>";
  document.getElementById("menu").innerHTML = menuecontent;
 }
 else if (window.opera) {  // Opera
  alert("Opera !");
 }
 else {
             alert("Unrecognized Browser Detected");
 }
</script>
</body>
</html>
</pre>

  1. Hallo,

    Opera ist in der Tat (noch) nicht in der Lage, eine html-Seite nachträglich zu ändern. Somit ist in erster Linie nicht das fehlende innerhtml der Haubtstolperstein, sondern das d in dhtml.....

    Weiteres bei

    http://www.opera.com

    Chräcker

    http://www.Stempelgeheimnis.de

    1. Hallo,

      sorry, für das Stückwerk, hier zwei tiefere Links zum Thema:

      auf Seite

      http://www.opera.com/docs/specs/#javascript

      steht:

      "Modifying the document structure is not yet possible (ie. you cannot add or remove HTML elements). "

      ...und auf der Seite:

      http://www.opera.com/docs/specs/js/

      steht, was gehen soll(te).....

      Chräcker

      http://www.Stempelgeheimnis.de

  2. MoiN!

    ach ja , die Opera-Abfrage scheint bei mir auch nicht zu funktioniere (Opera 6.01) obwohl ich die Browser Identification auf Opera gestellt habe :-/ ???

    Kein Wunder. Zusammengefaßt macht deine Abfrage nämlich folgendes:

    if (document.all) {  // Internet Explorer

    Wenn Opera sich als IE ausgibt, wird dieser Code ausgeführt.

    }
    else if (document.layers) {  // Netscape Navigator

    Das wird Opera niemals ausführen, weil er kein Netscape 4 ist.

    }
    else if (document.getElementById) {  // Netscape 6

    Das führt Opera auf jeden Fall aus, weil er W3C-DOM-kompatibel ist

    }
    else if (window.opera) {  // Opera

    Und das wird niemals ausgeführt, weil das Programm nie hierhin kommt.

    }
    else {

    Wer hier ankommt, ist kaputt. ;)

    }

    Was lernen wir daraus? Reihenfolge ändern!

    if (!window.opera)
    {
      //Hier allen Code sammeln
      if (document.getElementById)
      if (document.all)
      if (document.layers)
    }

    Damit löst du das Problem temporär. Und was ist, wenn Opera in der nächsten Version innerHTML doch wieder kennt, und genau das machen wird, was du willst?

    Vielleicht ist es doch besser, Opera nicht grundsätzlich auszunehmen (das Nichtkönnen von innerHTML kann ja auch noch andere Browser betreffen), sondern die Existenz von innerHTML abzufragen und es im Erfolgsfall zu ändern.

    if (document.getElementById)
      { if (document.getElementById("menu").innerHTML)
         { //Ändern }
      }

    Ich hab nicht geprüft, ob das funktioniert, aber grundsätzlich sollte man sich bei solchen Abfragen weniger an real existierenden Browsern orientieren, sondern an real existierenden DOM-Objekten, die man gerne manipulieren möchte, und die in verschiedenen Browsern nicht da sein müssen.

    - Sven Rautenberg