2011-12-19 2 views
4

se produit uniquement dans IE9 (dans Firefox ça fonctionne bien) essayé d'abaisser les paramètres de sécurité au minimum. Je ne suis pas sûr d'autres versions d'IE parce que j'ai 9 installé.nouvelle XMLHttpRequest dans IE9 provoque une erreur d'exécution JScript: objet ne supporte pas cette propriété ou la méthode

Environnement: asp.net 3.5 webforms Cadres de script: Anthem.NET, jquery

le script hymne tente de créer une instance de XMLHttpRequest et ne je crée juste essayé moi-même sur la page et a la même erreur. sur le même projet j'ai créé une nouvelle page html et cela a bien fonctionné.

de sorte qu'il pourrait être une collusion de script ...

Tout le monde?

Voici le code original qui échoue (ligne 3) prise du cadre de Anthem.NET qui fonctionne sur le système:

function Anthem_GetXMLHttpRequest() { 
if (window.XMLHttpRequest) { // <-- This passes as True! window.XMLHttpRequest is {...} 
    return new XMLHttpRequest(); // <---- Fails here 
} else { 
    if (window.Anthem_XMLHttpRequestProgID) { 
     return new ActiveXObject(window.Anthem_XMLHttpRequestProgID); 
    } else { 
     var progIDs = ["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 < progIDs.length; ++i) { 
      var progID = progIDs[i]; 
      try { 
       var x = new ActiveXObject(progID); 
       window.Anthem_XMLHttpRequestProgID = progID; 
       return x; 
      } catch (e) { 
      } 
     } 
    } 
} 
return null; 

}

est ici la valeur Window.XMLHttpRequest: enter image description here

et voici une image de l'échec que je me suis créé: enter image description here

Mise à jour: Nous venons de découvrir qu'il fonctionne en mode de compatibilité! et quand je reviens en mode normal ça marche encore! BTW: le mode document est en mode Quirks (qui est la valeur par défaut)

+0

Postez votre code? – Graham

+0

je ne peux pas commencer mais ça ne finira jamais ... beaucoup de scripts dans cette page ... ma question est comment pouvez-vous arriver à ce genre de situation que votre navigateur ne peut pas un nouvel objet XMLHttpRequest? – danfromisrael

+0

quelle est la valeur de 'window.XmlHttpRequest' (si vous l'inspectez ou l'imprimez sur la console?) – hugomg

Répondre

4

Récemment j'ai rencontré le problème et j'ai trouvé que si je place le code qui crée le XMLHttpRequest à l'intérieur d'une fonction qui s'exécute une fois que la fenêtre se charge que cela fonctionne bien à chaque fois.Essayez de placer votre code dans ce:

window.onload = function() { 
    var lala = new XMLHttpRequest(); 
} 

Ou si vous utilisez jquery:

$(function() { 
    var lala = new XMLHttpRequest(); 
}); 
+0

salut ryan. ça fait longtemps et je n'ai pas ce code pour tester si votre solution fonctionne. encore, je voudrais marquer une réponse correcte pour cette question. pouvez-vous approuver que ce code a corrigé le problème? – danfromisrael

1

Dans IE (< v.9) window#XMLHttpRequest est undefined car cela est un global spécifique navigateur Object (par exemple pour les navigateurs du W3C conforme à l ', tels que Mozilla ou Navigateurs basés sur Webkit ainsi que Opera).

Je ne me comprends pas vraiment pourquoi

if(window.XMLHttpRequest) 

n'évalue pas à false mais bien vous ne pouvez rien y faire.

Ce que vous pouvez faire est cependant ajouter une fourchette de code avant que pour vérifier window#ActiveXObject (Internet Explorer)

if(!! window.ActiveXObject) { // same as typeof window.ActiveXObject !== "undefined" 
    /* use MSXML */ 
} 
else if(!! window.XMLHttpRequest) { 
    /* use XMLHttpRequest */ 
} 
else throw Error("Browser does not support XHR.") ; 

Si vous ne pouvez pas modifier le code source à ce moment et le problème persiste, vous pourrait vouloir vouloir changer les cadres.


Modifier: Je remarquai que vous disiez le problème apparaît dans IE 9. Cela devrait en fait pas le cas comme IE 9 prend en charge la XMLHttpRequestObject.

+0

je ne vouloir toucher le code source de l'hymne car il suppose de bien fonctionner mais je le ferai si je dois ... J'ai édité la question et ajouté quelques détails sur l'état de window.XMLHttpRequest et quelques informations de débogage plus ... – danfromisrael

+0

@danfromisrael: Donc c'est un 'Object' vide? Génial! Vraiment étrange. Vous exécutez cela dans un aperçu dans Visual Studio, n'est-ce pas? Peut-être que c'est le vrai problème ici (VS pourrait utiliser IE <9 pour cela). Quoi qu'il en soit, la solution évidente serait d'utiliser le wrapper XHR (XMLHttpRequest) d'un autre framework. Aperçu – FK82

+0

vs2008? Quand je tape run & debug (le bouton de lecture vert), je démarre un serveur local et je peux charger le site à partir de n'importe quel navigateur en copiant et en collant l'adresse du locahost. .. VS2008 pourrait-il influencer ie9 d'une manière? Je pensais que les définitions IE9 bloquaient les capacités javascript mais toutes les définitions de sécurité sont définies au plus bas ... – danfromisrael

1

Croyez-le ou non, IE9 NE soutenir réellement XMLHttpRequest (vous pouvez modifier certains paramètres dans les options Internet en tant qu'utilisateur final, mais je suis sûr que ce ne sera pas une réponse acceptable pour votre patron).

Pour IE9, vous devez faire ceci:

var xmlhttp; 
if (ie9) 
{ 
    xmlhttp=new XDomainRequest(); 
} 
else 
{ 
    xmlhttp=new XMLHttpRequest(); 
} 

Alors, où vous normalement appliquer (pour les navigateurs réguliers):

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
      // do your thing 
    } 
}; 

que vous aurez à faire à la place (pour ie9):

if (this.ie9) 
{ 
    xmlhttp.onload = function() 
    { 
     // do your ie9 thing 
    }; 
} 
Questions connexes