Hab jetzt auf den internen XML-Parser von Firefox umgestellt und hab den Schritt definitiv nicht bereut, denn die Ladezeit ist deutlich geringer als zuvor.
Allerdings bin ich in Sachen Ladebalken nicht wirklich weiter gekommen.
Es findet noch immer keine Aktualisierung statt, obwohl ich die Ladebalkensteuerung mittlerweile mit setInterval() realisiert habe. Mittlerweile habe ich den Fragenkatalog auf 150 Fragen anwachsen lassen Noch schlimmer ist, dass ich wieder die Meldung von Firefox erhalte, ob das laufende Skript beendet oder fortgesetzt werden soll :((((
Zweimal muss ich bestätigen, dass er fortsetzen soll, erst dann läuft es. Ich muss davon ausgehen, dass der Großteil der Zielgruppen-Nutzer noch schwächere Kisten am laufen hat.
Hier mein letzter Code, der den XML-Fragenkatalog lädt:
// XML Datei Laden und weiter zur initialisierung
//
// 19.12.2007 ah
function startvorgang(lpic)
{
if (lpic==1)
{
xmlDatei="lpic1.xml";
}
else
{
xmlDatei="lpic2.xml";
}
if (document.implementation && document.implementation.createDocument)
{
// alert("Firefox");
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = initialisierung;
}
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4) initialisierung()
};
}
else
{
alert('Mit diesem Browser funktioniert die Software nicht.\n Diese Software ist für den Browser Firefox optimiert');
return;
}
xmlDoc.async = false;
xmlDoc.load(xmlDatei);
laden = window.setInterval("progress()", 1000);
}
function progress()
{
document.getElementById("rahmenbalken").firstChild.nodeValue = fortschritt_aktuell +" % des Fragenkatalogs geladen...";
document.getElementById("balken").style.width = fortschritt_aktuell + "%";
}
// Initialisierungsvorgang der Testeinstellungen
function initialisierung() // strXML
{
liste_fuellen("fragetitel", "fragetitel", 1, "");
fortschritt_aktuell=10;
liste_fuellen("fragetyp", "fragetyp", 1, "");
fortschritt_aktuell=20;
liste_fuellen("punkte", "punkte", 1, "");
fortschritt_aktuell=30;
liste_fuellen("hinweis", "hinweis", 1, "");
fortschritt_aktuell=40;
liste_fuellen("erklaerung", "erklaerung", 1, "");
fortschritt_aktuell=50;
liste_fuellen("fragetext", "fragetext", 1, "");
fortschritt_aktuell=60;
liste_fuellen("antwort", "antworttext", 1, "");
fortschritt_aktuell=70;
liste_fuellen("antwort", "zufrage", 2, "zuFrage");
fortschritt_aktuell=80;
liste_fuellen("antwort", "richtig", 2, "richtig");
matrix_fuellen();
document.getElementById("ladebalken").style.visibility = "hidden";
document.getElementById("Einstellungen").style.visibility = "visible";
document.Fragenanzahl.VerfuegbarAnzahl.value = AnzahlFragenkatalog();
window.clearInterval(laden);
}
function liste_fuellen(xml_tag, liste, typ, attribut)
{
var xml_element = xmlDoc.getElementsByTagName(xml_tag);
var anzahl_elemente=xml_element.length;
for (var i=0;i<anzahl_elemente;i++)
{
var element = xml_element[i];
for (j=0;j<element.childNodes.length;j++)
{
var inhalt = element.firstChild.nodeValue;
if (typ==2)
{
var attributeValue = element.getAttribute(attribut);
var inhalt = attributeValue;
}
NeuerEintrag = new Option(inhalt, inhalt, false, true);
parent.teststeuerung.document.getElementById(liste).options[parent.teststeuerung.document.getElementById(liste).length] = NeuerEintrag;
}
}
}
function matrix_fuellen()
{
// Die Liste mit den Fragetiteln durchlaufen
for (var i=0;i < parent.teststeuerung.document.listen.fragetitel.length; i++)
{
var AktuellerFragetitel = parent.teststeuerung.document.listen.fragetitel.options[i].value;
var MatrixString = "";
// Die zweite Schleife durchläuft die Liste zufrage nach den zum fragetitel passenden Antworten
for (var i2=0; i2 < parent.teststeuerung.document.listen.zufrage.length; i2++)
{
var AktuelleZuFrage = parent.teststeuerung.document.listen.zufrage.options[i2].value;
// Auf übereinstimmung Prüfen
if(AktuelleZuFrage == AktuellerFragetitel)
{
// Bei übereinstimmung den Wert aus der Liste richtig auswerten
// Der Matrix den entsprechenden Wert (0 oder 1) zuweisen
AktuellRichtig = parent.teststeuerung.document.listen.richtig.options[i2].value;
// Wenn Antwort richtig, dann eine 1 sonst eine 0
if (AktuellRichtig == "ja")
{
MatrixString = MatrixString + "1";
}
else
{
MatrixString = MatrixString + "0";
}
}
}
// Nach Auswertung der vorgegebenen Antworten und ihre Richtigkeit wird der MatrixString in die
// zur Frage passende mustermatrix-Liste
NeuerEintrag = new Option(MatrixString, MatrixString, false, true);
parent.teststeuerung.document.listen.mustermatrix.options[parent.teststeuerung.document.listen.mustermatrix.length] = NeuerEintrag;
}
// Jetzt noch die gegebenen Antworten eintragen (default: Alle auf 0)
for (var i=0;i < parent.teststeuerung.document.listen.fragetitel.length; i++)
{
var AktuellerFragetitel = parent.teststeuerung.document.listen.fragetitel.options[i].value;
var MatrixString = "";
// Die zweite Schleife durchläuft die Liste zufrage nach den zum fragetitel passenden Antworten
for (var i2=0; i2 < parent.teststeuerung.document.listen.zufrage.length; i2++ )
{
var AktuelleZuFrage = parent.teststeuerung.document.listen.zufrage.options[i2].value;
// Auf übereinstimmung Prüfen
if(AktuelleZuFrage == AktuellerFragetitel)
{
MatrixString = MatrixString + "0";
}
}
// Nach Auswertung der vorgegebenen Antworten und ihre Richtigkeit wird der MatrixString in die
// zur Frage passende mustermatrix-Liste
NeuerEintrag = new Option(MatrixString, MatrixString, false, true);
parent.teststeuerung.document.listen.antwortmatrix.options[parent.teststeuerung.document.listen.antwortmatrix.length] = NeuerEintrag;
var Free = "";
NeuerEintrag = new Option(Free, Free, false, true);
parent.teststeuerung.document.listen.antworteingabe.options[parent.teststeuerung.document.listen.antworteingabe.length] = NeuerEintrag;
var Zero ="0";
NeuerEintrag = new Option(Zero, Zero, false, true);
parent.teststeuerung.document.listen.wiedervorlage.options[parent.teststeuerung.document.listen.wiedervorlage.length] = NeuerEintrag;
}
}
Leider fällt mir nicht mehr viel ein.
Irgendwie muss ich dem Browser wenigstens zwischendurch melden, dass alles ok ist und er nicht das Fenster mit der Meldung oben aufpoppen lässt.
Hoffe jemand hat einen Rat für mich.
Dank im Voraus
André