最新のjquery1.9で実行すると、impromptuver4.1でエラーが発生します
Uncaught TypeError:未定義のプロパティ'msie'を読み取ることができません
これは、以前のバージョンのjqueryには当てはまりませんでした。
即席の問題のある行は20行目です。
var ie6 = ($.browser.msie && $.browser.version < 7);
この行を置き換えてImpromptuにパッチを当てることができます:
var ie6 = ($.browser.msie && $.browser.version < 7);
...これで:
var ie6 = ( navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/) );
...これで、jQueryv1.9.0+で動作できるようになりました。オプションで、jQueryv1.8.3にロールバックできます。
編集(2013年3月12日)
コメントをありがとう@johntrepreneur、あなたは正しいです。2つのメモ:
この編集された行:
var ie6 = ( navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/) );
...これに置き換える必要があります:
var ie6 = ( navigator.userAgent.match(/msie [6]/i) );
...私の悪い、私はパッチを急いで書きました。それでうまくいくはずです。
Impromptuは、最後のコミットでIE6サポートを完全に削除しました(この元の投稿の後の2013年3月25日)。OPによってもたらされた問題は、ImpromptuがjQueryv1.9+で壊れたことでした... Impromptujsファイルを最後のバージョンに更新しても問題は修正されます。
私はこれが範囲をターゲットにすることを好み、<IE9&jQuery1.9+でのみコードを実行します
if (/msie [1-8]./.test(navigator.userAgent.toLowerCase()))
{
//code here
}
Jqueryが$.browser機能を廃止して以来、私が見つけた最も簡単な方法は、javascriptでグローバルを作成することでした。
var LTE_IE9 = false;
および使用中の条件HTMLIEセレクター
<!--[if lte IE 9]>
<script>LTE_IE9 = true;</script>
<![endif]-->
私はそれを使用します。
var browser = $.browser;
if ( ! browser ) {
var ua = navigator.userAgent.toLowerCase();
var m = /(msie) ([\w.]+)/.exec( ua ) || ! /compatible/.test(ua) && /(mozilla)/.exec( ua ) || [];
browser = { version: m[2] };
browser[ m[1] ] = true;
}
Jquery migrate
プラグインを追加
//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js
$.browser.msie
>jquery1.9.Xから削除
ここで述べたように、バージョン1.9以降、 $。browserはjQueryに存在しなくなりました。
$ .browseは、jQuery V. 1.4以降で非推奨になり、jQueryV.1.9以降で削除されました。
それでも、これらのコード行でこの問題を修正できます(すべてのブラウザー用)
jQuery.browser = {};
jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit/.test(navigator.userAgent.toLowerCase());
jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase());
jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
私にとっては問題なく動作します。