Sven Rautenberg: DHTML + Opera + innerHTML Alternative ??

Beitrag lesen

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