ええ、私は機能検出が望ましいことを知っています。
私が使用しているコードベースに、$.browser.msie
CSS$.browser.version
をレンダリングするかどうかを決定するケースがあります。コードを書いた開発者はもう私たちと一緒にいないので、代わりにどのような機能検出をここに書くべきか正確に理解できていません。
簡単な修正として、$.browser.msie と $.browser.version を実装する最短の方法は何ですか?
ええ、私は機能検出が望ましいことを知っています。
私が使用しているコードベースに、$.browser.msie
CSS$.browser.version
をレンダリングするかどうかを決定するケースがあります。コードを書いた開発者はもう私たちと一緒にいないので、代わりにどのような機能検出をここに書くべきか正確に理解できていません。
簡単な修正として、$.browser.msie と $.browser.version を実装する最短の方法は何ですか?
jQuery 1.8.3からコードをコピーします。
// Limit scope pollution from any deprecated API
(function() {
var matched, browser;
// Use of jQuery.browser is frowned upon.
// More details: http://api.jquery.com/jQuery.browser
// jQuery.uaMatch maintained for back-compat
jQuery.uaMatch = function( ua ) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
/(msie) ([\w.]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
matched = jQuery.uaMatch( navigator.userAgent );
browser = {};
if ( matched.browser ) {
browser[ matched.browser ] = true;
browser.version = matched.version;
}
// Chrome is Webkit, but Webkit is also Safari.
if ( browser.chrome ) {
browser.webkit = true;
} else if ( browser.webkit ) {
browser.safari = true;
}
jQuery.browser = browser;
})();
JavaScript の代わりに条件付きコメントを使用します。
<!--[if lte IE 7]>
<link rel="stylesheet" href="ie.css" type="text/css">
<![endif]-->
JQueryは、1.9で使用すると$.browserを復元するMigrateプラグインをリリースしました。実稼働サーバーでは、必ず実稼働バージョンのMigrateを使用してください。開発バージョンでは、1.9sansMigrateでコードが破損する場所を通知する一連のコンソールメッセージが生成されます。
ただし、JQueryMigrateを使用して$.browserを復元することは、おそらく最善の長期的な解決策ではありません。名前が示すように、それは移行ツールとして意図されており、そのブラウザ検出機能が積極的に維持されるかどうかはわかりません。別の方法はModernizrです。
私が個人的に行うことは、当面の間、本番サイトをJQ 1.8に維持し、開発マシンでMigrateの開発バージョンをテストして、1.9がどのように機能するかをよりよく理解することです(アップグレード戦略を決定する前に、$。browser)を削除してください。
適切にリファクタリングされるまでスクリプトが壊れないように簡単に修正します (必要に応じて、他のバージョンの条件付きコメントを追加します)。
<!--[if IE 7]>
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 7 }} </script>
<![endif]-->
<!--[if IE 8]>
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 8 }} </script>
<![endif]-->