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.






durchgehen und testen, wie es sich da verhält. 