IE 10上每个页面都有Javascript错误

时间:2012-12-26 22:10:48

标签: javascript asp.net vb.net internet-explorer-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;

它适用于自6以来的所有其他IE版本,这是一个相当的命运。

我知道HTML只支持真正的浏览器,而不支持Internet Explorer ,但我的客户真的希望该网站能够在IE10中运行。

为了清楚起见,它适用于ie6到9,chrome,firefox和opera。它们都没有显示javascript错误,只有ie10,并且每次点击都会出现此错误。 我copule没跟踪谁在调用这个方法。这是一个很大的网站,我使用的js代码都没有调用它。我认为可能MicrosoftAjax.js框架绑定了click事件并且它正在执行某些东西,但我不确定它在执行什么。

任何人都可以帮助我吗?

7 个答案:

答案 0 :(得分:18)

我在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">

其中任何一个都适合我。

答案 1 :(得分:5)

答案在以下链接中:

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

我不得不改变Microsoft.Ajax.js。

答案 2 :(得分: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;
}

答案 3 :(得分:1)

我有类似的问题;按照nileshsaikhede发布的解决方案后解决 http://forums.asp.net/t/1884400.aspx/1

我所要做的只是添加

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

到我的母版页。

答案 4 :(得分:0)

我找出了一个选项。我已修改MicrosoftAjax.jsMicrosoftAjax.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);

我在ASPX页面的ScriptManager代码中使用Script选项引用了修改后的js文件。这就是它的完成方式。

我希望它有助于其他人。

答案 5 :(得分:0)

如果您使用的是Internet Explorer 按 ALT 选择工具-----&gt;兼容性视图-------&gt;然后添加您的网站以在兼容性中显示。 希望它会对你有所帮助。

答案 6 :(得分:0)

您可以尝试以下操作:

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

<meta http-equiv="X-UA-Compatible" content="requiresActiveX=true" />