【问题标题】:Javascript error in every page on IE 10IE 10 上每个页面中的 Javascript 错误
【发布时间】:2012-12-12 09:09:39
【问题描述】:

我的 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 框架已经绑定了点击事件并且它正在执行某些东西,但我不确定它正在执行什么。

谁能帮帮我?

【问题讨论】:

  • 在调用你的函数之前,你能把数字四舍五入(或者用parseInt()将它们转换为整数)吗?
  • 你调试了吗?为什么要传递一个浮点数? -1 未表现出尽职调查。这可能是因为您正在乘以或除以数字并遇到精度问题,如果是这样,只需将数字四舍五入
  • 当我有一个损坏的 jQuery 插件或糟糕的 JavaScript 代码时,这种事情通常会发生在我身上。页面上有任何使用 Ajax 的内容吗?您是否看到任何引用了不存在的东西的代码?如果您在 Firefox 或 Chrome 中查看该页面,您在点击 Control-Shift-J 时是否看到任何错误?
  • 我无法追踪谁在调用这些方法。我没有打电话给他们,我认为这是 MicrosoftAjax.js 内部的东西
  • 您在使用 iFrame 吗?这段代码之前已经引起了一些麻烦,尤其是在带有 iFrame 的页面上。 forums.asp.net/t/1078598.aspx/1。另外:support.microsoft.com/kb/936993

标签: javascript asp.net vb.net internet-explorer-10


【解决方案1】:

答案在以下链接:

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

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

【讨论】:

  • 我有点难过,我不是唯一一个仍在使用 Microsoft Ajax Extensions 1.0 运行 ASP.NET 2.0 项目的人......我感受到了你的痛苦。
  • 谢谢贾斯汀,真的很痛苦。
  • 知识库文章作为起点很有帮助,但在他们的编码更改后,我仍然收到错误。我最终用 Math.round() 进一步改变了它。
  • 现在是 2017 年,我正在开发 .net 4.0 网络表单。这个组织只能包扎应用程序这么久。但在此之前感谢这些答案。
【解决方案2】:

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

我所要做的就是添加

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

到我的母版页。

【讨论】:

  • 我没有尝试过,也不会尝试,因为它已修复,我不想搞砸任何事情,但如果我今天必须修复它,我会试一试。谢谢亚历克斯。
  • 这确实是一个糟糕的修复,因为它可能在 IE 11 中不起作用,在标准模式下运行时修复真正的问题会更好。
  • @Lavinski - 是的,如果您有时间并且有解决方案,最好的选择是解决真正的问题。我在部署前几个小时发现了这个问题,我的管理层不希望我推迟部署,而且我找不到解决问题的方法。这只是一个替代的快速修复。
  • content="IE=edge" 无法解决此问题或在 chrome 中。
【解决方案3】:

我想出了一个选项。我已经修改了 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 文件。就是这样完成的。

我希望它可以帮助其他人。

【讨论】:

    【解决方案4】:

    我找到了一个不错的solutionYuriy 博客:

    <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 函数以对数字进行四舍五入。

    或者,设置&lt;compilation debug="false"&gt;

    其中任何一个都对我有用。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        只是为了补充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;
        }
        

        【讨论】:

        • 我遇到了 Telerik RadDock 和 RadWindow 的这个问题。可以用这段代码解决。谢谢!
        【解决方案7】:

        您可以尝试以下方法:

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

        【讨论】:

        • 欢迎来到 Stack Overflow。请用英文写下你的答案,因为 StackOverflow 是 English only site
        猜你喜欢
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        • 1970-01-01
        相关资源
        最近更新 更多