DHTML + Opera + innerHTML Alternative ??
Stefan Rosendorf
- dhtml
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>
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
Chräcker
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
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