XHR pro IE6

Se způsobem ošetření XMLHttpRequest v IE6 přišel Nicolas Faugout person.

Jeho trik external je velmi prostý:

Na začátek JS umístíte tento kód:

if (!XMLHttpRequest) {
window.XMLHttpRequest = function() {
return new ActiveXObject('Microsoft.XMLHTTP');
}
}

Tímto způsobem si zajistíte, že bude existovat funkce XMLHttpRequest() i v IE6 a IE5.5, tedy v prohlížečích, které nemají XHR zabudován. Použití je pak prosté:

var ajax = new XMLHttpRequest();

(via Ajaxian external)


Není to konstrukční funkce

Problém vidím v tom, že XMLHttpRequest není vytvořena jako konstrukční funkce, ale jako běžná funkce vracející objekt. Takže v IE to na rozdíl od ostatních prohlížečů bude fungovat i bez operátoru new a (new XMLHttpRequest() instanceof XMLHttpRequest) naopak bude vracet false.

Bohužel nevím, jak to vyřešit, protože prosté window.XMLHttpRequest = function() { }; window.XMLHttpRequest.prototype = new ActiveXObject('Microsoft.XMLHTTP'); nefunguje. Složitější přístup window.XMLHttpRequest = function() { var xxx = new ActiveXObject('Microsoft.XMLHTTP'); this.open = function (method, url) { return xxx.open(method, url); }; } dobře funguje pro metody, ale nedá se použít pro vlastnosti. Čtené vlastnosti se dají aktualizovat v metodách, které je mění (this.status = (typeof xxx.status != 'unknown' ? xxx.status : undefined)), ale jak vyřešit přiřazení do onreadystatechange, mě nenapadá, protože IE nemá setter.


Volby prohlížení komentářů

Vyberte si, jak chcete zobrazovat komentáře a klikněte na "Uložit změny".
Syndikovat obsah