IE9 erreur JavaScript: SCRIPT5007: Impossible d'obtenir la valeur de la propriété 'ui': l'objet est null ou undefined

mon site Web fonctionne bien sur Chrome, Firefox et Internet Explorer 8. Mais sur Internet Explorer 9, des erreurs très bizarres se déclenchent quand on plane sur des composants.

SCRIPT5007: impossible d'obtenir la valeur de la propriété 'ui': l'objet est nul ou non défini ScriptResource.axd?d=sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgmcypqxv5nez1ietx3drhufmftemwoh2l3771sigglr2bqloxaiwxveveperldcl0hfhhufdtom0o55k0&t=ffffffffd37cb3a1, ligne 181 character 1914

et en suivant le lien vers l'erreur dans le javascript me montre ces bits de code:

onNodeOver:function(B,A){A.ui.onOver(B)},onNodeOut:function(B,A){A.ui.onOut(B)}

Je ne sais pas trop comment résoudre cette erreur. J'ai vu solution mais cela n'a pas résolu le problème pour moi.

Des Idées?

40
demandé sur Carsten 2011-04-26 11:26:17

8 réponses

de nombreuses bibliothèques JavaScript (en particulier les bibliothèques non récentes) ne gèrent pas bien IE9 parce qu'elles rompent avec IE8 dans la gestion de beaucoup de choses.

code JS qui renifle pour IE échouera assez fréquemment dans IE9, à moins qu'un tel code ne soit réécrit pour traiter IE9 spécifiquement.

avant de mettre à jour le code JS, vous devez utiliser la balise meta "Compatible X-UA" pour forcer votre page web à passer en mode IE8.

EDIT: Je ne peux pas croire que, 3 ans plus tard et on est sur IE 11, et il y a encore des voix pour ça. :- ) Beaucoup de bibliothèques JS devraient maintenant au moins supporter IE9 nativement et la plupart supporter IE10, donc il est peu probable que vous ayez besoin de la balise meta de nos jours, à moins que vous n'ayez pas l'intention de mettre à jour votre bibliothèque JS. Mais attention, IE10 change les choses en ce qui concerne les scripts inter-domaines et certaines ruptures de code de bibliothèque basées sur le CDN. Vérifiez la version de votre bibliothèque. Par exemple, le Dojo 1.9 sur le CDN cassera sur le IE10, mais le 1.9.1 résoudra il.

EDIT 2: Hey, les gars, vous REALLY besoin d'obtenir vos actes. Nous sommes maintenant à la mi-2014!!! Je suis se lever-votes pour ça! Révisez vos sites pour vous débarrasser des anciennes-c'est-à-dire des dépendances codées en dur!

Soupir... Si j'avais su que ce serait de loin ma réponse la plus populaire, j'aurais probablement passé plus de temps à la polir...

EDIT 3: c'est maintenant presque 2016. Upvotes toujours à retardement jusqu'... Je pense qu'il y a beaucoup de code legacy... Un jour nos programmes vont-live nous...

144
répondu Stephen Chung 2015-12-21 08:32:38

j'avais le même problème en IE9. J'ai suivi la réponse ci-dessus et j'ai ajouté la ligne:

<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />

dans mon <head> et ça a fonctionné.

12
répondu savan 2016-01-27 20:54:21

j'ai écrit un code qui renifle IE4 ou plus et fonctionne parfaitement dans les sites pour les clients de mon entreprise, ainsi que mes propres sites personnels.

incluez les constantes et les variables de fonction énumérées ci-dessous dans un fichier JavaScript include sur votre page...

//methods
var BrowserTypes = {
    Unknown: 0,
    FireFox: 1,
    Chrome: 2,
    Safari: 3,
    IE: 4,
    IE7: 5,
    IE8: 6,
    IE9: 7,
    IE10: 8,
    IE11: 8,
    IE12: 8
};

var Browser = function () {
    try {
        //declares
        var type;
        var version;
        var sVersion;

        //process
        switch (navigator.appName.toLowerCase()) {
            case "microsoft internet explorer":
                type = BrowserTypes.IE;
                sVersion = navigator.appVersion.substring(navigator.appVersion.indexOf('MSIE') + 5, navigator.appVersion.length);
                version = parseFloat(sVersion.split(";")[0]);
                switch (parseInt(version)) {
                    case 7:
                        type = BrowserTypes.IE7;
                        break;
                    case 8:
                        type = BrowserTypes.IE8;
                        break;
                    case 9:
                        type = BrowserTypes.IE9;
                        break;
                    case 10:
                        type = BrowserTypes.IE10;
                        break;
                    case 11:
                        type = BrowserTypes.IE11;
                        break;
                    case 12:
                        type = BrowserTypes.IE12;
                        break;
                }
                break;
            case "netscape":
                if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { type = BrowserTypes.Chrome; }
                else { if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) { type = BrowserTypes.FireFox } };
                break;
            default:
                type = BrowserTypes.Unknown;
                break;
        }

        //returns
        return type;
    } catch (ex) {
    }
};

alors tout ce que vous avez à faire est d'utiliser n'importe quelle fonctionnalité conditionnelle telle que...

ie. value = (Browser() >= BrowserTypes.IE) ? node.text : node.textContent;

ou WindowWidth = (((Browser() >= BrowserTypes.IE9) || (Browser() < BrowserTypes.IE)) ? window.innerWidth : document.documentElement.clientWidth);

ou sJSON = (Browser() >= BrowserTypes.IE) ? xmlElement.text : xmlElement.textContent;

l'idée? Espérons que cette aide.

Oh, vous pourriez vouloir garder à l'esprit de QA la fonction Browser() après la sortie de IE10, juste pour vérifier qu'ils n'ont pas changé les règles.

5
répondu Justin Russo 2012-10-19 04:11:59

vérifier si il y a une virgule à la fin.

                            },
                            {
                                name: 'МОФ. Перелив из баков. м3/ч',
                                data: graph_high3,
                                dataGrouping: {
                                    units: groupingUnits,
                                    groupPixelWidth: 40,
                                    approximation: "average",
                                    enabled: true,
                                    units: [[
                                            'minute',
                                            [1]
                                        ]]
                                }
                            }   // if , - SCRIPT5007
1
répondu des1roer 2016-02-17 08:03:44

Cela a fonctionné pour moi dans IE 11:

<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">
1
répondu fender 2018-01-18 11:35:56

vous pouvez également obtenir cette erreur si vous accédez à la page localement (via file:// au lieu de http://)..

Il y a une discussion à ce sujet ici: https://github.com/jeromegn/Backbone.localStorage/issues/55

0
répondu Rosdi Kasim 2013-05-30 07:19:32

Eh bien, vous devriez également essayer d'ajouter le code Javascript dans une fonction, puis appeler la fonction après que le corps du document a chargé..cela a fonctionné pour moi:)

-1
répondu Fazi 2012-02-01 08:27:38

j'ai été confrontée au même problème.

j'utilisais le code ci-dessous .aspx page sans écrire la configuration d'authentification dans web.fichier de configuration. Après avoir écrit les paramètres dans le Web.config, je suis capable d'exécuter mon code.

<% If Request.IsAuthenticated Then%>
     <table></table>
<%end if%> 
-3
répondu Mazhar Khan 2013-02-28 11:35:27