2008-11-12 4 views

Répondre

1

Voici quelqu'un qui a ses mains sales avec cette question:

http://www.webmasterworld.com/javascript/3195000.htm

une manière générale à la recherche de ces questions est de jeter un regard sur le code source d'une librairie javascript, comme jQuery, puisque l'un des fonctions de la bibliothèque est de gérer les différences. Voici un extrait de jQuery qui traite de XMLHttpRequest. Notez les commentaires sur les différences de navigateur.

// Create the request object; Microsoft failed to properly 
    // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available 
    var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); 

    // Open the socket 
    // Passing null username, generates a login popup on Opera (#2865) 
    if(s.username) 
     xhr.open(type, s.url, s.async, s.username, s.password); 
    else 
     xhr.open(type, s.url, s.async); 

    // Need an extra try/catch for cross domain requests in Firefox 3 
    try { 
+0

Ceci est bien pour un chargement spécifique de HTML dans un conteneur, mais l'utilisation de Microsoft.XMLHTTP progid serait une erreur si vous avez besoin d'un comportement XML cohérent. – AnthonyWJones

3

probablement comment obtenir un XMLHttpRequest en premier lieu la différence la plus évidente:

var xhr; 
if (window.XMLHttpRequest) { 
    xhr = new XMLHttpRequest(); // Mozilla/Webkit/Opera 
} else if (window.ActiveXObject) { 
    xhr = new ActiveXObject('Msxml2.XMLHTTP'); // IE 
} else { 
    throw new Error('Ajax likely not supported'); 
} 

qui dit, je regarderais fortement dans une bibliothèque d'abstraction, comme jQuery. il fait des choses comme ajax ridiculement facile:

$('#container').load('/ajax/resource'); 
+0

XMLHttpRequest s'applique également à IE7. Sur IE6, il serait préférable d'utiliser le ProgID MSXML2.XmlHttp.3.0 pour assurer une implémentation spécifique retournée (dans certaines circonstances, une version nuetral ProgID peut renvoyer une implémentation de la version 2.0 à la place). – AnthonyWJones

+0

Il y a aussi la différence entre le mode de fonctionnement synchrone et asynchrone. Pour certains navigateurs, cela implique un paramètre supplémentaire dans l'appel. – bart

0

Je sais qu'il est un peu une réponse de dérobade, mais ce genre de chose vous rendre fou si vous utilisez les méthodes intégrées et-partout incompatibles avec les navigateurs . Choisissez n'importe quelle bibliothèque javascript et respirez un soupir de soulagement.