前回は、IE 11 のユーザエージェントから MSIE が消えたことと、それに伴う IE 11 以降の Sniffing (判別) 方法をお話ししました。この影響は jQuery の $.browser にも及びます。
jQuery 1.3 から $.browser の使用はサポート外です。とはいえ、古いプログラムの全てに手を入れることも難しいですから、 jquery-migrate を使って古いバージョンの jQuery と同様の動作を確保して、$.browser を使っている方もおられるでしょう。その場合、IE が msie : true となることを前提したプログラムは正しく動作しなくなります。そこで、今回は IE 11 以降でも msie : true とするための jquery-migrate の改造方法をお話しします。
現時点ではバージョン 1.2.1 が新しいので、これを改造対象の例とします。
jquery-migrate.js には 238 行目あたりに、以下のような部分があります。
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"
};
};
これを以下のように書き換えます。
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 ) ||
/(trident)¥/.+rv¥:([¥d+¥.¥d]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([¥w.]+)|)/.exec( ua ) ||
[];
match[1] = (match[1] == "trident") ? "msie" : match[1];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
こうすることで IE 11 以降も { msie : true, version : "11.0" ... } といった具合に識別できるようになります。
書き換えが面倒な方は jquery-migrate.js をダウンロードしてお使いください。
※改造済のファイルになります。
お問い合わせについて
業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
※ご契約前のコメントやメールでのやりとりは無料です。