Blutiger Anfaenger sucht Cross-Browser JS-Loesung
Von: , Frage gestellt am Fr, 15. Dez 2000
Hallo allerseits,
ich bin noch blutiger Anfaender in Sachen JavaScript und es geht mir darum fuer alle zur Zeit wichtigen Browser (Netscape4/6, Internet Explorer4/5 sowie Opera5) eine moeglichst effiziente Funktion zu finden, um in ein absolute positioniertes Container-Element (z.B. div mit position:absolute;) dynamisch per JavaScript einen HTML-String reinzubringen. Dazu habe ich mir bis jetzt folgendes gedacht und entwickelt:
Gehen wir davon aus, wir haben 5 Boolean-Variablen, die je nachdem welcher Browser detektiert worden ist auf true oder false stehen:
bIsNS4 = true|false; // Netscape4
bIsNS6 = true|false; // Netscape6
bIsIE4 = true|false; // InternetExplorer4
bIsIE5 = true|false; // InternetExplorer5
bIsOP5 = true|false; // Opera5
In einer Funktion wird nun ein String fuer das Div-Element concat-iniert. Z.B. eine Table wie folgt:
var strForDiv = "<table border='1' cellpadding='1' cellspacing='1' bgColor='yellow' summary='Table'>";
strForDiv += "<tr align='center'><td valign='middle'>";
strForDiv += "BINGO";
strForDiv += "<\/td><\/tr><\/table>";
Dieser String soll nun einer weiteren Funktion per Aufruf uebergeben werden, die diesen Inhalt (natuerlich Browser abhaengig) in die Division reinschreibt:
<div id="idDiv"></div>
Der Aufruf erfolgt so:
writeStrToLyr(strForDiv,"idDiv");
Die aufgerufene Funktion sieht zur Zeit so aus:
function writeStrToLyr(prmString,prmId)
{
var objDiv = getLyrReference(prmId);
if (!objDiv) return;
setLyrVisibility(false,objDiv);
if (bIsNS4) {
with (objDiv.document) {
open("text/html","replace");
write(prmString);
close();
}
} else if (bIsIE4||bIsIE5||bIsNS6) {
objDiv.innerHTML = prmString;
} else if (bIsOP5) {
// TODO: Opera5 Browser Code goes here.
}
setLyrVisibility(true,objDiv);
}
function setLyrVisibility(prmVisible,prmLayer)
{
if (!prmLayer) return;
if (bIsNS4)
prmLayer.visibility = prmVisible ? "show" : "hide";
else
prmLayer.style.visibility = prmVisible ? "visible" : "hidden";
}
function getLyrReference(prmId)
{
if (!prmId) return(null);
if (bIsNS4)
return(window.document.layers[prmId]);
if (bIsIE4)
return(window.document.all[prmId]);
if (bIsIE5||bIsNS6||bIsOP5)
return(window.document.getElementById(prmId));
return(null);
}
writeStrToLyr() beschreibt die "Layer" auch wenn es nicht dem DOM-Standard entspricht (aber es soll ja funktionieren und moeglichst einfach sein). setLyrVisibility() setzt Cross-Browser-maessig die Visibility (wegen flickering oder auch nicht). getLyrReference() soll sich die ensprechende Referenz auf die Division -falls vorhanden- holen.
Ich denke die Frage ist klar. Bis dato habe ich selbst keine fuer mich befriedigende Loesung gefungen :-)
Wer kann mir da weiterhelfen?
Danke im vorraus
CIAO
