web-dev-qa-db-ja.com

jQueryはブラウザIE9以下を検出し、モーダルをスローしてアップグレードします

JQueryを使用してIE9以下を検出できるようにしたい(またはより良い方法があるかどうか)。ブラウザのバージョンがIE9以下の場合、Chrome、FFなどにアップグレードするオプションを備えたモーダルをロードしたいと思います。

$ .browserが機能しなくなったことを読んだので、私が望むことを達成するための最善の方法は何か疑問に思っています。

$(document).ready(function(){

   /* Get browser */
   $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());

   /* Detect Chrome */
   if($.browser.chrome){
      /* Do something for Chrome at this point */
      alert("You are using Chrome!");

      /* Finally, if it is Chrome then jQuery thinks it's 
       Safari so we have to tell it isn't */
       $.browser.safari = false;
  }

  /* Detect Safari */
  if($.browser.safari){
      /* Do something for Safari */
      alert("You are using Safari!");
  }

});
10
John

IEバージョンの検出にjQueryを使用しないでください。代わりに条件付きコメントを使用してください。

どうして?そもそもなぜこれらの古いバージョンをターゲットにしたいのか考えてみてください。おそらく、必要な特定のJS/CSS機能をサポートしていないためです。では、これらの古いバージョンで実行されると確信している独自のJSコードを本当に維持したいですか?あなたがそのルートに行くなら、あなたはあなたが書いた検出コードがIE6または5または4で機能するかどうかについて考え始める必要があります...苦痛です!

代わりに、次を試してください。

  1. モーダル/バナー要素をHTMLに追加します。
  2. メインのcssファイルで、display:noneを使用してこの要素を非表示にします。これにより、最近のバージョンのIEおよびIE以外のブラウザーには表示されません。
  3. この要素を明らかにするIEのみのcssまたはjsファイルを作成します。
  4. 必要なIEバージョン)を対象とする条件付きコメント内にこのファイルを含めます。

以下の例では、CSSを使用した単純なリビールを使用していますが、必要に応じてこれをJSに簡単に置き換えることができます。複雑にしすぎないでください。そうしないと、初期のIEバージョンで簡単に壊れてしまう可能性があります。

#index.html
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="main.css">
    <!--[if lte IE 9]>
      <link rel="stylesheet" type="text/css" href="ie-only.css">
    <![endif]-->
  </head>
  <body>
    <div class="ie-only">Go upgrade your browser!</div>
  </body>
</html>

#main.css
.ie-only { display: none }

#ie-only.css
.ie-only { display: block }

ここに便利な 条件付きコメント参照 があります。

11
var browser = {
        isIe: function () {
            return navigator.appVersion.indexOf("MSIE") != -1;
        },
        navigator: navigator.appVersion,
        getVersion: function() {
            var version = 999; // we assume a sane browser
            if (navigator.appVersion.indexOf("MSIE") != -1)
                // bah, IE again, lets downgrade version number
                version = parseFloat(navigator.appVersion.split("MSIE")[1]);
            return version;
        }
    };

if (browser.isIe() && browser.getVersion() <= 9) {

    console.log("You are currently using Internet Explorer" + browser.getVersion() + " or are viewing the site in Compatibility View, please upgrade for a better user experience.")
}
16
Sam Jones
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}
3
xicooc

$。browser() は削除されます jqueryバージョン1.9 スクリプトで以下のコードを使用します。

(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"
        };
    };
    // Don't clobber any existing jQuery.browser in case it's different
    if ( !jQuery.browser ) {
        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;
    }
})(jQuery);
0
Rohan Kumar

サイトポイント から調整:

if(navigator.appVersion.indexOf("MSIE 9.") !== -1)
0
dude