1

ブラウザがアプリケーションでサポートされているかどうかを確認する必要があります。これは次の方法で行います。

main.js(メインrequire.jsモジュール)

define(['underscore', 'backbone', 'views/mainView', 'views/oldBrowser', 'ui', function(_, Backbone, mainView, oldBrowser){

var _browserHandshaking = function(){
    var browserSupportedCookie = $.cookie('browserSupported');
    var browserNameCookie = $.cookie('browserName');
    var browserVersionCookie = $.cookie('browserVersion');

    if(browserSupportedCookie === null){
        if(/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
            $.ui.browserName = 'chrome';
        } else if(/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
            $.ui.browserName = 'opera';
            /Version[\/\s](\d+\.\d+)/.test(navigator.userAgent);
        } else if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
            $.ui.browserName = 'ie';
        } else if(/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
            $.ui.browserName = 'safari';
            /Version[\/\s](\d+\.\d+)/.test(navigator.userAgent);
        } else if(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
            $.ui.browserName = 'firefox';
        } else if(/webOS/i.test(navigator.userAgent)){
            $.ui.browserName = 'webos';
        } else if(/Android/i.test(navigator.userAgent)){
            $.ui.browserName = 'android'
        } else if(/iPhone/i.test(navigator.userAgent)){
            $.ui.browserName = 'iphone';
        } else if(/iPod/i.test(navigator.userAgent)){
            $.ui.browserName = 'ipod';
        } else if(/BlackBerry/i.test(navigator.userAgent)){
            $.ui.browserName = 'blackberry';
        }

        if($.ui.browserName !== false){

            // Set browser version.
            if(!$.ui.browserVersion){
                $.ui.browserVersion = parseFloat(new Number(RegExp.$1));
            }

            for(var browserName in $.ui.supportedBrowsers){
                if($.ui.browserName === browserName){
                    if($.ui.browserVersion >= $.ui.supportedBrowsers[browserName]){
                        $.ui.browserSupported = true;
                        break;
                    }
                }
            }

            $.cookie('browserVersion', $.ui.browserVersion, { expires: 7 });
            $.cookie('browserName', $.ui.browserName, { expires: 7 });
            $.cookie('browserSupported', $.ui.browserSupported, { expires: 7 });
        }           
    } else {
        $.ui.browserSupported = browserSupportedCookie;
        $.ui.browserName = browserNameCookie;
        $.ui.browserVersion = browserVersionCookie;
    }
};

_browserHandshaking.call(this);

var Router = Backbone.Router.extend({
    routes: {
        "old-browser": "oldBrowser",
        "*actions": "main",
    },
    oldBrowser: function(){
        oldBrowser.render();
    },
    main: function(){
        mainView.render();
    }
});

$.ui.router = new Router();

// Start routing.
Backbone.history.start({
    pushState: true,
    root: $.ui.rootDir
});

});

すべてのアクションでトリガーする関数がBackbone.jsにありますか?そこではこれを簡単に実装できます:

preRouting: function(){
  if(!$.ui.browserSupported){
    return false;
  }

  return true;
}

ブラウザがサポートされているかどうかを確認する必要があります。サポートされている場合はmainViewを呼び出すことができます。そうでない場合は、oldBrowserビューをトリガーする必要があります。これは、各ルート関数呼び出しで実行したくありません。

誰かがこれに対するより良い解決策を持っていますか?そして、基本的にルート関数呼び出しのプリリミッターであるチェックを作成できるかどうかを誰かが知っていますか。

手伝ってくれてありがとう :)

4

1 に答える 1

1

コメントに基づいて、次のコマンドでプッシュ状態を確認できます:(pushStateを使用できます

var hasPushstate = !!(window.history && history.pushState);

css3アニメーション:(javascriptを使用して(そしてmodernizrなしで)css遷移を検出するから?

function supportsTransitions() {
    var b = document.body || document.documentElement;
    var s = b.style;
    var p = 'transition';
    if(typeof s[p] == 'string') {return true; }

    // Tests for vendor specific prop
    v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'],
    p = p.charAt(0).toUpperCase() + p.substr(1);
    for(var i=0; i<v.length; i++) {
      if(typeof s[v[i] + p] == 'string') { return true; }
    }
    return false;
}
var hasCSS3Transitions = supportsTransitions();

ブラウザにアプリケーションが必要とする機能があるかどうかを確認するだけであれば、ブラウザの名前/バージョンを確認する必要はありません。

于 2012-07-20T17:58:25.190 に答える