web-dev-qa-db-fra.com

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

Mon site Web fonctionne bien sous Chrome, Firefox et Internet Explorer 8. Mais sous Internet Explorer 9, des erreurs très étranges sont déclenchées lors du survol de composants.

SCROUILLEZ

Et suivant le lien vers l'erreur dans le javascript, il 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 la solution this mais cela n'a pas résolu le problème pour moi.

Des idées?

42
Soroush Hakami

De nombreuses bibliothèques JavaScript (en particulier les plus récentes) ne gèrent pas bien IE9 car il rompt avec IE8 dans la gestion de beaucoup de choses.

Le code JS qui détecte IE échouera fréquemment dans IE9, à moins que ce code ne soit réécrit pour gérer IE9 spécifiquement.

Avant que le code JS ne soit mis à jour, vous devez utiliser la méta-balise "X-UA-Compatible" pour forcer votre page Web en mode IE8.

EDIT: Je ne peux pas croire ça, 3 ans plus tard et nous sommes sur IE11, et il y a encore des votes positifs pour cela. :-) De nombreuses bibliothèques JS doivent maintenant au moins prendre en charge IE9 de manière native et la plupart doivent supporter IE10. Il est donc peu probable que vous ayez besoin de la balise META de nos jours, à moins que vous n'ayez pas l'intention de mettre à niveau votre bibliothèque JS. Mais attention, IE10 change les choses en ce qui concerne les scripts interdomaines et les ruptures de code de bibliothèques basées sur CDN. Vérifiez la version de votre bibliothèque. Par exemple, Dojo 1.9 sur le CDN se cassera sur IE10, mais 1.9.1 le résoudra.

EDIT 2: Hé, les gars, vous [~ # ~] vraiment [~ # ~] avez besoin de réunir vos actes à présent. Nous sommes maintenant à la mi-2014 !!! Je suis [~ # ~] toujours [~ # ~] en train d'obtenir des votes pour cela! Révisez vos sites pour vous débarrasser des dépendances old-IE 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 peaufiner….

(EDIT 3: Il est maintenant presque 2016. Les votes positifs continuent de tourner ... Je suppose qu'il y a beaucoup de code hérité sur là-bas ... Un jour, nos programmes vont nous survivre ...

146
Stephen Chung

J'avais le même problème dans 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 cela a fonctionné.

12
savan

J'ai écrit du code qui renifle IE4 ou une version supérieure et fonctionne parfaitement sur les sites des clients de mon entreprise, ainsi que sur mes propres sites personnels.

Incluez les variables de fonction et de constante énumérées suivantes dans un fichier d'inclusion javascript 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) {
    }
};

Ensuite, tout ce que vous avez à faire est d’utiliser une fonctionnalité conditionnelle telle que ...

c'est à dire. 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;

Avoir l'idée? J'espère que cela t'aides.

Vous voudrez peut-être garder à l'esprit le contrôle qualité de la fonction Browser () après la publication d'IE10, juste pour vérifier qu'ils n'ont pas modifié les règles.

5
Justin Russo

Cela a fonctionné pour moi dans IE 11:

<meta http-equiv="x-ua-compatible" content="IE=Edge; charset=UTF-8">
2
fender

vérifiez s'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
des1roer

Vous pourriez également avoir cette erreur si vous visualisez l’accès à la page localement (via file:// au lieu de http://) ..

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

0
Rosdi Kasim