1

jQuery 2.0+ を使用する Web サイトがあり、jQuery が読み込まれていない場合にアクションを実行したいと考えています。要するに、IE8、7、6 など、jQuery 2 をサポートしていないブラウザーをチェックしています。

私はjquery.check.jsでこのようにやっています

if (typeof window.jQuery == 'undefined') {
    //show not supported page
}

BundleConfig は、次のようにバンドルを実行しています。

var b1 = new ScriptBundle("~/bundle/js").Include(
            "~/Scripts/jquery-{version}.js",
            "~/Scripts/jquery.check.js"
            );
        b1.Orderer = new InputBundleOrderer();
        b1.Transforms.Clear(); //this removes the mimification for debugging purposes

        bundles.Add(b1);

コードをオンにするとdebug="true"、問題なく動作します。回すfalseと動かない。IE8 でデバッグしている間、ifステートメントに到達することはなく、多数のエラーが発生します。

エラーが発生すると IE8 が JavaScript ファイルの実行を停止するように思われるため、コード ブロックに到達することはありません。debug="true"それが、ファイルが個別にロードされたときに機能し、バンドルされたときに機能しない(1つのファイル)理由について思いつく唯一の理由です。

私の推論は正しいですか?

4

2 に答える 2

2

私の知る限り、あなたは正しいです。エラーが発生すると、そのファイルに対するスクリプトの実行が停止します。本当に同じファイルに配置したい場合は、jQuery 宣言を try/catch/finaly ブロックで囲むことができます (それが良いアイデアかどうかはわかりません :| )。

また、本番用に .min.js ファイルを使用している場合は、バンドルに含めるべきではないと思います。

于 2013-07-30T19:24:20.460 に答える
1

これらのテストを行うために、 modernizrのようなものを使用してみませんか? それがその目的です。ブラウザに適したバージョンの jQuery をロードすることもできます。より簡単な選択は、条件付きコメントを使用することです。

<!--[if lt IE 9]>  
  <script src="jquery-1.9.0.js"></script>  
<![endif]-->  
<!--[if (gte IE 9) | (!IE)]><!-->  
  <script src="jquery-2.0.0.js"></script>  
<!--<![endif]-->  

jQuery 1.9+ は機能互換性のある jQuery 2.x であるため、古いブラウザーを「サポートしない」理由がわかりません。適切なブラウザーに適切なブラウザーをロードするだけです。

そして、なぜ transforms.Clear() を実行しているのですか? デバッグモードは縮小化を自動的に削除します..

于 2013-07-30T23:51:26.833 に答える