15

我的 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,每次点击都会出现这个错误。我不知道是谁在调用这个方法。这是一个大网站,我使用的所有 js 代码都没有调用它。我认为可能 MicrosoftAjax.js 框架已经绑定了点击事件并且它正在执行某些东西,但我不确定它正在执行什么。

谁能帮我?

4

7 回答 7

19

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

这些都对我有用。

于 2013-06-19T23:45:28.487 回答
5

答案在以下链接中:

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

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

于 2012-12-28T21:25:36.220 回答
4

Just to add to mafu josh's answer, the bound prototype can also be the issue.

Here's the code for that

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;
}
于 2014-12-09T16:18:53.743 回答
1

我有一个类似的问题;遵循 nileshsaikhede http://forums.asp.net/t/1884400.aspx/1在此处发布的解决方案后解决

我所要做的就是添加

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

到我的母版页。

于 2013-03-25T17:40:57.003 回答
0

我想出了一个选择。在返回所有区域之前,我已经修改了用于舍入点值的MicrosoftAjax.jsand文件- 如下所示。MicrosoftAjax.debug.jsSys.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 文件。这就是它的完成方式。

我希望它对其他人有所帮助。

于 2013-05-01T13:14:22.947 回答
0

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

于 2014-08-18T10:12:19.967 回答
0

您可以尝试以下方法:

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

<meta http-equiv="X-UA-Compatible" content="requiresActiveX=true" />
于 2020-12-17T18:45:06.827 回答