En fait l'objet est assez semblable entre IE et Moz, seule change la facon de le creer.
Enfin, il faut tout de meme nuancer, en effet, avec IE il y a quelques problemes. L'objet est un ActiveX, par consequent il n'est pas "lie" a la version du navigateur. Par consequent tu peux avoir un IE 5.5 avec la dernier version de l'objet (la 2 ou la 3, je sais plus). Et tomber apres sur un IE 6 avec la version 1 de l'objet, donc un peu "galere".
Neanmoins, toutes ces version fonctionnement de la meme maniere, seule change la facon d'initialiser l'objet, le JS specifique a chaque nav est donc assez petit.
XMLHttpRequest n'est utilise par gmail que pour faire des requetes sur le serveur. Donc pour aller chercher les mails ou verifier si un nouveau mail est arrive. Le reste est effectivement fait en JS, par exemple la "modification dynamique" de la page.
Autre information, il me semble que gmail fonctionne sur Opera. (Si c'est pas gmail, alors c'est LiveSearch qui fonctionne sur Opera). Or sur opera cet objet n'est pas implemente (sauf dans la derniere beta). La questione est de savoir comment ils ont fait pour "contourner" ce probleme.
En fait la reponse est "simple". Ils utilisent les fonctions DOM pour ajouter dynamiquement du contenu a la page.
En fait ce qu'ils font c'est qu'ils creent "a la volee" une balise "script" contenue dans le head. Cette balise script "pointe" vers la page qui doit retourner les informations depuis le serveur.
Une fois que le script est "charge" il "s'execute" afin d'appeler un "callback" et prevenir la page que le contenu est "arrive".
Je n'ai pas regarde le code de gmail, ni celui de LiveSearch, mais personellement j'aurais fait comme ca :
1) J'aurais cree un "objet" JS pour encapsuler la "creation" d'un "socket" (se terme est faux, mais je pense qu'il reprenste bien l'idee de ce que je veux faire). Lors de la creation, ce "socket" va tenter d'abord tenter d'initialiser l'activeX appelle XMLHttpRequest, on commence dont par IE (ceci pour une raison simple, il me semble que ce dernier plante si l'on essaye de creer l'objet sans avoir init l'activex...). On commence d'abord avec les "dernieres" version de l'activex pour "descendre" jusqu'a reussir a init l'objet. Si on a reussi on peut continuer.
Si on arrive pas a init l'activeX, cela veut dire que l'on est dans un autre navigateur, genre Moz. On essaye donc d'initialiser l'objet JS XMLHttpRequest. Si ca marche on conntinue.
Si ca marche pas, alors c'est que l'on doit etre sous Opera. Ici, personnellement j'utiliserais un objet JS perso qui va "imiter" XMLHttpRequest. Cet objet va faire en sorte que le code general de "comminication" reste identique aux trois navigateurs.
2) Une fois l'objet initialise, on peut continuer sans se soucier du navigateur (rappel, sous opera on utilise notre objet).
Opera: On va donc creer un objet JS qui va avoir la meme "interface" qu'XMLHttpRequest. Donc il aura les meme methodes, et fonctionnera de la meme facon, seule difference avec l'objet normal, c'est nous qui alons le construire.
Pour le faire fonctionner, on va donc utiliser les fonctions DOM afin d'ajouter un "script" dynamiquement a la page. Une fois ce script ajoute et "execute" il appelera notre fonction callback. Cette derniere va se charger de passer les donees a la fonction callback du code.
Il faut egalement preciser que l'objet XMLHttpRequest fonctionne egalement avec une fonction "callback" qui sera appelee une fois les donees arrivees.
Voila dans les grandes lignes, comment j'aurais implemente l'objet XMLHttpRequest pour qu'il fonctionne sur le plus de nav possibles. Je ne sais pas si gmail a fait comme ca, il me semble qu'ils ajoutent un script avec les fonction DOM sous opera, mais je me rappelle plus.
Si tu comptes utiliser cette methode, tu dois faire attention a plusieurs choses :
1) Il me semble que la plupart des navigateurs ont implemente une "securite" qui empeche de faire un "document.write('script');" ceci afin d'eviter des "attaques". C'est une espece de "mot tabou". Il me semble que cela risque de perturber l'ajout via la fonction DOM. Il existe neanmoins un contournement tres simple. En effet il suffit de faire "'scr'+'ipt'" afin de contourner le probleme. Il suffit de decouper le mot en deux.
2) Tu peux aller encore plus loin dans la "compatibilité" avec les anciens navigateurs. Par exemple, au lieu d'ajouter un script via les fonctions dom, tu peux ajouter une "iframe" invisible. Cette iframe devra pointer vers un fichier specifique cote serveur.
2b) Tu peux egalement aller plus loin si tu arrive a detecter cote serveur un navigateur qui ne supporte pas les fonctions d'ajout DOM. Tu peux lui servir un page "speciale". Du genre un page avec 2 frames. Une frame de taille 100% ou se trouve le site, et une autre de 0%. La 2e frame invisible, va te servir de "scriptframe" suffira de changer sa source dynamiquement pour "communiquer" avec le serveur.
Il est a noter que le support d'opera et des anciens navigateur va necessiter la creation d'un page specifique cote serveur. En effet cette page devra en fait etre un "contenant" pour le Javascript, qui lui meme sera un contenant pour l'information que tu veux transmetre. Alors qu'avec l'objet XMLHttpRequest tu n'as pas besoin de cette page conteneur ni du script conteneur.
Finallement un petit mot sur l'accessibilite. L'utilisation abusive de cet objet nuit gravement a l'accessibilite, et certaines des techniques que j'ai evoquees vont a l'encontre de "l'ethique" que devrait avoir un webmaster. Notament la 2b. En effet, le serveur web devrait servir la MEME page a TOUS les navigateurs.