Ajax dla IE6
W artykule "Obiekt XMLHttpRequest" pokazałem jak można używać Ajaksa opartego o specjalny obiekt do tego przeznaczony. Co jednak zrobić, gdy jakaś przeglądarka nie ma zaimplementowanego takiego obiektu?
Możliwe wyjścia
- siądź i płacz
- użyj innej metody, np. pływającej ramki lub ciasteczek
- przeczytaj ten artykuł
W przypadku nowoczesnych przeglądarek (włączając w to IE7 i nowsze) istnieje banalny sposób na stworzenie obiektu XMLHttpRequest. Wymagany kod:
var client = new XMLHttpRequest();
Niestety w przypadku Internet Explorera 6 takie coś działać nie będzie. Jednak spokojnie – pamiętaj, że IE 6 to najlepsza przeglądarka na świecie*. Można żartobliwie powiedzieć, że potrafi robić nawet to, czego nikt tworząc go nie przewidział. Także tę lukę można załatać.
Sposób na wykorzystanie AJAX w IE6
var client = createXmlHttpRequestObject();
function createXmlHttpRequestObject()
{
var xmlHttp = null;
try
{
xmlHttp = new XMLHttpRequest(); // nowoczesne przegladarki
}
catch(e) // IE <= 6
{
var XmlHttpVersions = [
'MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP'
];
for (var i=0; i < XmlHttpVersions.length && null === xmlHttp; i++)
{
try
{
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
} catch (e) {}
}
if (null === xmlHttp)
{
throw new Error('Nie uda się użyć Ajaksa');
}
}
return xmlHttp;
}
Jak można łatwo zauważyć porównując listing 1 i 2, IE6 wymaga sporego nadpisania kodu. Oczywiście ma to wpływ na szybkość działania strony.
Sądzę, że lepszym sposobem na walkę z IE jest wykorzystanie frameworków JS, np. jQuery. Dzięki nim można pisać szybciej, efektowniej, a o kompatybilność dba dana biblioteka. Choć tak naprawdę najlepszym sposobem jest zaintalowanie przeglądarki. Dajmy już wreszcie odejść IE 6 na emeryturę
--
* ten program ma już blisko 11 lat, a mimo to potrafi w ogóle wyświetlić dzisiejsze strony. Uważam to za sukces. Nie zmienia to faktu, że jest już stary i jego czas w Internecie dawno powinien był się skończyć.