Hallo zusammen,
ich habe da ein extrem komisches und vorallem mir unerklärliches Problem.
Nur ganz kurz zur Hintergrundgeschichte:
Wir sind in der Firma momentan dabei eine Web-Applikation in Javascript und HTML5 zu schreiben, welche Daten aus einer Datei liest und diese dann als Plotter darstellt. Die Daten in dieser Datei sind Binär gespeichert. Das heißt wir müssen mit so Sachen wie "getFloat32" in Javascript arbeiten.
Ich habe das Ganze lokal an meinem Rechner mit der aller neuesten Internet Explorer 11 Version probiert, da läuft es einwadfrei.
Wenn ich exakt denselben Code jedoch per Iframe in die Website laden lasse (auf einem Rechner, der extra nur fürs Testen bereit steht mit Windows 8 und nicht der aktuellsten IE11 Version, ist aber immernoch IE11), dann passieren komische Sachen.
Z.B. funktionierte diese Funktion nicht mehr richtig:
Onload wird irgendwie nie mehr gecallt. Also habe ich folgendes Work-Around gemacht:
Und in ref_func auf den readyState geprüft. Das funktioniert jetzt alles einwandfrei.
Das nächste Problem, das ich jetzt habe, ist aber, dass die Antwort von meinem Request das Ergebnis nicht mehr in "this.response" speichert, sondern in "this.responseBody". "this.response" ist hingegen gar nicht in meinem this-Objekt vorhanden (habe es per debugger nachgeprüft).
Ein weiteres sehr komisches Problem besteht in dieser Funktion:
Dabei ist "data_array_buffer" die Antwort (also this.responseBody) vom Request. Und hier sagt er mir plötzlich "DataView is undefined". Genau so wie "data_array_buffer" undefined ist (also laut debugger), obwohl ich den 100% genau so auch lokal (nur hier nicht über Web-Server sondern über "file://...") teste und er da funktioniert. Der einzige Unterschied ist, dass ich es auf der Website per Iframe einbetten lasse (die Seite ist von anderen programmiert) und lokal nur die von mit erstellte Seite teste.
Wie gesagt lokal hat alles funktioniert. Jetzt schiebe ich die Dateien aber auf den Server, wo ein lokaler Web-Server läuft. Die Requests an den lokalen Web-Server auf dem Test-Rechner sehen demnach so aus:
"Http://localhost/subsite"
Da das Problem aber nur bei den HTML5-Komponenten auftritt, denke ich, dass die Konfigurationen im Allgemeinen passen, jede andere Seite funktioniert auch schon seit Jahren (also seit IE 7 oder so) und tut sie immernoch. Nur die neu gemachte Seite will nicht.
Mein kompletter (wichtiger) Code, der das iframe einbettet sieht so aus:
Die "canvas.html" sieht so aus:
Wir haben auch schon testweise die Internet-Privacy im IE auf Minimum runtergeregelt, aber das half alles nichts.
Hat jemand eine Ahnung woran das liegen könnte? Ich bin leider gezwungen mit IE zu arbeiten und das ganze auch in IE einzubauen, FF o.ä. ist also keine Alternative.
Edit:
Nach weiteren Test habe ich herausgefunden, dass es entweder am Iframe liegt oder an dem Code, der das Iframe einbindet. Denn auf demselben Rechner mit derselben IE11 Version funktioniert es, wenn ich nur meinen Code teste, genau so wie bei mir lokal.
Unterstützt IE11 kein HTML5 für Iframes (halt ich für extrem unwahrscheinlich, deswegen werd ich das auch nicht groß testen)?
Kann man irgendwo (außerhalb vom head) das "<!DOCTYPE HTML>" überschreiben, sodass nicht mehr HTML5 genommen wird?
Ich versteh das nicht, kann es aber leider nicht einmal ansatzweise in anderen Browsern testen, da wir auf diesem Rechner nichts installieren dürfen und er außerdem kein Internet-Zugang hat.
ich habe da ein extrem komisches und vorallem mir unerklärliches Problem.
Nur ganz kurz zur Hintergrundgeschichte:
Wir sind in der Firma momentan dabei eine Web-Applikation in Javascript und HTML5 zu schreiben, welche Daten aus einer Datei liest und diese dann als Plotter darstellt. Die Daten in dieser Datei sind Binär gespeichert. Das heißt wir müssen mit so Sachen wie "getFloat32" in Javascript arbeiten.
Ich habe das Ganze lokal an meinem Rechner mit der aller neuesten Internet Explorer 11 Version probiert, da läuft es einwadfrei.
Wenn ich exakt denselben Code jedoch per Iframe in die Website laden lasse (auf einem Rechner, der extra nur fürs Testen bereit steht mit Windows 8 und nicht der aktuellsten IE11 Version, ist aber immernoch IE11), dann passieren komische Sachen.
Z.B. funktionierte diese Funktion nicht mehr richtig:
PHP Code:
function requestFile(path,ref_func)
{
var xhr = new XMLHttpRequest();
xhr.open('GET', path, true);
xhr.responseType = 'arraybuffer';
xhr.onload=ref_func;
xhr.send();
}
PHP Code:
function requestFile(path,ref_func)
{
var xhr = new XMLHttpRequest();
xhr.open('GET', path, true);
// new browsers (XMLHttpRequest2-compliant)
if ('responseType' in xhr) {
xhr.responseType = 'arraybuffer';
}
// old browsers (XMLHttpRequest-compliant)
else if ('overrideMimeType' in xhr) {
xhr.overrideMimeType('text/plain; charset=x-user-defined');
}
// IE9 (Microsoft.XMLHTTP-compliant)
else {
xhr.setRequestHeader('Accept-Charset', 'x-user-defined');
}
xhr.onload=ref_func;
xhr.onreadystatechange=ref_func;
xhr.send();
}
Das nächste Problem, das ich jetzt habe, ist aber, dass die Antwort von meinem Request das Ergebnis nicht mehr in "this.response" speichert, sondern in "this.responseBody". "this.response" ist hingegen gar nicht in meinem this-Objekt vorhanden (habe es per debugger nachgeprüft).
Ein weiteres sehr komisches Problem besteht in dieser Funktion:
PHP Code:
function parseDataFile(data_array_buffer)
{
var current_byte=0;
var x_arr_graphs=new Array();
var y_arr_graphs=new Array();
var text_arr_graphs = new Array();
var info_arr=new Array();
var newView=new DataView(data_array_buffer);
//...
}
Wie gesagt lokal hat alles funktioniert. Jetzt schiebe ich die Dateien aber auf den Server, wo ein lokaler Web-Server läuft. Die Requests an den lokalen Web-Server auf dem Test-Rechner sehen demnach so aus:
"Http://localhost/subsite"
Da das Problem aber nur bei den HTML5-Komponenten auftritt, denke ich, dass die Konfigurationen im Allgemeinen passen, jede andere Seite funktioniert auch schon seit Jahren (also seit IE 7 oder so) und tut sie immernoch. Nur die neu gemachte Seite will nicht.
Mein kompletter (wichtiger) Code, der das iframe einbettet sieht so aus:
PHP Code:
<!DOCTYPE HTML>
<html>
<HEAD>
<TITLE>Service Analyze</TITLE>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#A0A0A0" LINK="#FFFFA5" VLINK="#FFFFA5" ALINK="#FFFFA5" onUnload="if(this.onUnload != null) onUnload();">
...
<iframe src="canvas.html" style="width:99%;height:300px">
</iframe>
...
</body>
</HTML>
PHP Code:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body id="body1" oncontextmenu="return false">
...
</body>
</html>
Hat jemand eine Ahnung woran das liegen könnte? Ich bin leider gezwungen mit IE zu arbeiten und das ganze auch in IE einzubauen, FF o.ä. ist also keine Alternative.
Edit:
Nach weiteren Test habe ich herausgefunden, dass es entweder am Iframe liegt oder an dem Code, der das Iframe einbindet. Denn auf demselben Rechner mit derselben IE11 Version funktioniert es, wenn ich nur meinen Code teste, genau so wie bei mir lokal.
Unterstützt IE11 kein HTML5 für Iframes (halt ich für extrem unwahrscheinlich, deswegen werd ich das auch nicht groß testen)?
Kann man irgendwo (außerhalb vom head) das "<!DOCTYPE HTML>" überschreiben, sodass nicht mehr HTML5 genommen wird?
Ich versteh das nicht, kann es aber leider nicht einmal ansatzweise in anderen Browsern testen, da wir auf diesem Rechner nichts installieren dürfen und er außerdem kein Internet-Zugang hat.