web-dev-qa-db-ja.com

IE 10のすべてのページでJavascriptエラー

私の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、クロム、Firefoxおよびオペラでうまく機能します。それらのどれもjavascriptエラーを表示せず、ie10だけであり、このエラーはクリックするたびに発生します。私は誰がこのメソッドを呼び出しているかを追跡していません。これは大きなサイトであり、私が使用するjsコードはどれもそれを呼び出していません。おそらくMicrosoftAjax.jsフレームワークがクリックイベントをバインドし、何かを実行していると思いますが、何が実行されているのかわかりません。

誰か助けてもらえますか?

15
Tony

答えは次のリンクにあります:

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

Microsoft.Ajax.jsを変更する必要がありました。

5
Tony

私はニースを見つけました 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">を設定します

これらのどちらかが私のために働いた。

18
Mafu Josh

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
Kelsey Abreu

同様の問題がありました。 nileshsaikhedeによってここに投稿された解決策に従った後に解決されました http://forums.asp.net/t/1884400.aspx/1

私がしなければならなかったのは追加することだけでした

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

私のマスターページに。

1
Alex Z

私は1つのオプションを理解します。すべての領域で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);

ASPXページのScriptManagerコードでScriptオプションを使用して変更されたjsファイルを参照しました。それが行われる方法です。

私はそれが他の人に役立つことを願っています。

0
Hemendra Shah

internet Explorerを使用している場合は、[〜#〜] alt [〜#〜] [ツール] -----> [互換表示] ------->を選択し、表示するWebサイトを追加します。互換性で。それがあなたを助けることを願っています。

0
Vijay B Kale