web-dev-qa-db-fra.com

Erreur Javascript dans chaque page IE dix

Mon site asp.net fonctionne bien sur IE6, IE7, IE8, IE9, Chrome, Safari, Firefox et Opera. Mais cela ne fonctionne pas du tout dans IE10.

Si je clique n'importe où sur le site (n'importe quel bouton, n'importe quel lien, etc.), l'erreur suivante s'affiche:

SCRIPT5022: Sys.ArgumentOutOfRangeException: Value must be an integer.
Parameter name: x
Actual value was 5.999999523162842. 

Les choses JS, comme les onglets, ne fonctionnent pas à cause de ce problème. J'ai traqué le problème et c'est dans MicrosoftAjax.js, en particulier dans la méthode suivante.

Sys.UI.Point = function Sys$UI$Point(x, y) {
    /// <param name="x" type="Number" integer="true"></param>
    /// <param name="y" type="Number" integer="true"></param>
    /// <field name="x" type="Number" integer="true"></field>
    /// <field name="y" type="Number" integer="true"></field>
    var e = Function._validateParams(arguments, [
        {name: "x", type: Number, integer: true},
        {name: "y", type: Number, integer: true}
    ]);
    if (e) throw e;

    this.x = x;
    this.y = y;

Cela fonctionne sur toutes les autres versions de IE depuis 6, ce qui est un destin.

Je sais que le langage HTML est uniquement pris en charge par les vrais navigateurs, en laissant de côté Internet Explorer , mais mon client souhaite vraiment que le site fonctionne dans IE10.

Pour être clair, cela fonctionne bien dans ie6 à 9, chrome, firefox et opéra. Aucune d'elles ne montre les erreurs javascript, c'est-à-dire 10, et cette erreur se produit à chaque clic. Je ne peux pas suivre qui appelle cette méthode. Ceci est un grand site et aucun du code js que j'utilise ne l’appelle. Je pense que le framework MicrosoftAjax.js a probablement lié l'événement click et qu'il exécute quelque chose mais je ne suis pas sûr de ce qu'il est en train d'exécuter.

Quelqu'un peut-il m'aider?

15
Tony

La réponse est dans le lien suivant:

http://support.Microsoft.com/kb/936993

J'ai dû changer Microsoft.Ajax.js.

5
Tony

J'ai trouvé un Nice solution blogué par Yuriy :

<script language="javascript">
    Sys.UI.Point = function Sys$UI$Point(x, y) {

        x = Math.round(x);
        y = Math.round(y);

        var e = Function._validateParams(arguments, [
            {name: "x", type: Number, integer: true},
            {name: "y", type: Number, integer: true}
        ]);
        if (e) throw e;
        this.x = x;
        this.y = y;
    }
</script>

Collez ceci sur votre page pour remplacer la fonction Sys $ UI $ Point pour arrondir les nombres.

Ou bien, définissez <compilation debug="false">

L'un ou l'autre a fonctionné pour moi.

17
Mafu Josh

Juste pour ajouter à la réponse de mafu josh , le prototype lié peut également être le problème.

Voici le code pour ça

Sys.UI.Bounds = function Sys$UI$Bounds(x, y, width, height) {
    x = Math.round(x);
    y = Math.round(y);

    var e = Function._validateParams(arguments, [
        { name: "x", type: Number, integer: true },
        { name: "y", type: Number, integer: true },
        { name: "width", type: Number, integer: true },
        { name: "height", type: Number, integer: true }
    ]);
    if (e) throw e;
    this.x = x;
    this.y = y;
    this.height = height;
    this.width = width;
}
3
Kelsey Abreu

J'ai eu un problème similaire; résolu après avoir suivi la solution publiée ici par nileshsaikhede http://forums.asp.net/t/1884400.aspx/1

Tout ce que j'avais à faire était d'ajouter

<meta http-equiv="X-UA-Compatible" content="IE=7" />

sur ma page maître.

1
Alex Z

Je trouve la seule option. J'ai modifié les fichiers MicrosoftAjax.js et MicrosoftAjax.debug.js pour arrondir la valeur en points avant de renvoyer Sys.UI.Point pour toutes les zones - voir ci-dessous.

    if (typeof param1 === "number")
    {
        param1 = Math.round(param1);
    }

    if (typeof param2 === "number")
    {
        param2 = Math.round(param2);
    }

    return new Sys.UI.Point(param1, param2);

J'ai référencé le fichier js modifié à l'aide de l'option Script dans le code ScriptManager de la page ASPX. C'est comme ça que c'est fait.

J'espère que ça aide les autres.

0
Hemendra Shah

si vous utilisez Internet Explorer, appuyez surALTsélectionnez Outils -----> Affichage de la compatibilité -------> puis ajoutez votre site Web à afficher dans Compatibility. espérons que cela vous aidera.

0
Vijay B Kale