Ошибка Javascript на каждой странице в IE 10 - программирование

Ошибка Javascript на каждой странице в IE 10

Мой сайт asp.net работает хорошо на IE6, IE7, IE8, IE9, Chrome, Safari, Firefox и Opera. Но он не работает вообще в IE10.

Если я нажимаю на любом месте сайта (любая кнопка, любая ссылка и т.д.), она возвращает следующую ошибку:

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

JS вещи, такие как вкладки, не работают из-за этой проблемы. Я обнаружил проблему, и она находится в MicrosoftAjax.js, в частности, следующим способом.

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;

Он работает со всеми другими версиями IE с 6, что довольно сурово.

Я знаю, что HTML поддерживается только реальными браузерами, но Internet Explorer, но мой клиент действительно хочет, чтобы сайт работал в IE10.

Просто, чтобы быть понятным, он хорошо работает в версиях от 6 до 9, хром, firefox и opera. Ни один из них не показывает ошибки javascript, просто ie10, и эта ошибка возникает при каждом нажатии. Я не могу отследить, кто вызывает этот метод. Это большой сайт, и ни один из js-кода, который я использую, вызывает его. Я думаю, что, вероятно, инфраструктура MicrosoftAjax.js связала событие click, и оно что-то выполняет, но я не уверен, что он выполняет.

Кто-нибудь может мне помочь?

4b9b3361

Ответ 2

Я нашел хороший solution, размещенный в блоге 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>

Вставьте это на свою страницу, чтобы переопределить функцию Sys $UI $Point для округления чисел.

Или, установите <compilation debug="false">

Либо все это сработало для меня.

Ответ 3

Просто чтобы добавить в ответ mafu josh, связанный прототип также может быть проблемой.

Здесь код для этого

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;
}

Ответ 4

У меня была аналогичная проблема; разрешено после выполнения решения, размещенного здесь nileshsaikhede http://forums.asp.net/t/1884400.aspx/1

Все, что мне нужно было сделать, это добавить

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

на мою главную страницу.

Ответ 5

Я выясню один вариант. Я изменил файл MicrosoftAjax.js и MicrosoftAjax.debug.js для округления значения точки перед возвратом Sys.UI.Point для всех областей - см. Ниже.

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

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

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

Я ссылаюсь на модифицированный файл js, используя параметр Script в коде ScriptManager страницы ASPX. Вот как это делается.

Я надеюсь, что это поможет другим.

Ответ 6

если вы используете интернет-проводник, тогда нажмите ALT выберите Инструменты ----- > Вид совместимости ------- > затем добавьте свой сайт для отображения в разделе Совместимость. надеюсь, что это поможет вам.