Браузер и версия в библиотеке прототипов? - PullRequest
14 голосов
/ 16 октября 2008

Я привык к использованию Атласа. Недавно я начал переходить на jQuery, а иногда и на прототип. Проект, над которым я сейчас работаю, использует прототип.

В Prototype есть простой способ получить имя и версию браузера? Я просмотрел документацию по API и не могу ее найти.

Ответы [ 6 ]

18 голосов
/ 09 марта 2009

В качестве дополнения к ответу Нерци вы можете добавить возможность обнаружения версий IE, используя это:

Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7;

С другой стороны, вы также должны обнаружить детали агента пользователя на стороне сервера. В любом случае, обнаружение браузера - это серьезно ошибочная стратегия написания кросс-браузерных сценариев, которая используется только в случае сбоя при обнаружении функции браузера. Для пользователя довольно легко изменить данные своего пользовательского агента.

7 голосов
/ 27 октября 2008

Prototype предлагает несколько флагов, которые вы можете проверить, чтобы понять, какой браузер работает. Помните, что гораздо лучше проверять функциональность, которую вы хотите использовать, а не проверять конкретный браузер.

Вот часть браузера и определения возможностей prototype.js, которая в данный момент находится в дереве исходных текстов:

var Prototype = {
  Browser: {
    IE:     !!(window.attachEvent &&
      navigator.userAgent.indexOf('Opera') === -1),
    Opera:  navigator.userAgent.indexOf('Opera') > -1,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && 
      navigator.userAgent.indexOf('KHTML') === -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions: 
      document.createElement('div')['__proto__'] &&
      document.createElement('div')['__proto__'] !== 
        document.createElement('form')['__proto__']
  },
}

Таким образом, вы можете проверить, является ли текущий браузер IE, изучив значение Prototype.Browser.IE или, в качестве альтернативы, быть более совместимым с будущим и проверить наличие определенной функции, например XPath, с Prototype.BrowserFeatures.XPath.

3 голосов
/ 22 января 2011

Я использую это сверх определений браузера Prototype.

Object.extend(Prototype.Browser, {
    ie6: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 6 ? true : false) : false,
    ie7: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 7 ? true : false) : false,
    ie8: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 8 ? true : false) : false,
    ie9: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 9 ? true : false) : false
});

Надеюсь, это поможет!

3 голосов
/ 16 октября 2008

Вы правы - в прототипе нет утилиты для определения имени или версии браузера.

Если вам конкретно нужно получить информацию о браузере в качестве плагина, я бы предложил добавить следующее (взято непосредственно из jQuery):

var Browser = Class.create({
  initialize: function() {
    var userAgent = navigator.userAgent.toLowerCase();
    this.version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
    this.webkit = /webkit/.test( userAgent );
    this.opera = /opera/.test( userAgent );
    this.msie = /msie/.test( userAgent ) && !/opera/.test( userAgent );
    this.mozilla = /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent );
  }
});
2 голосов
/ 01 декабря 2009

У меня есть prototype.js, расширенный после:

var Prototype = { ... };

с этим:

// extension
if (Prototype.Browser.IE) {
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
        Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1);
    }
}

У меня нормально работает, звонить как:

if (Prototype.Browser.IE && Prototype.BrowserFeatures['Version'] == 8) { ... }
0 голосов
/ 25 февраля 2012
            <script type="text/JavaScript">

                function getBrowserVersion()
                {
                    var msg = "Not Recognised Browser";

                    if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
                    {
                        var ffversion = new Number(RegExp.$1)

                        for (var i = 1; i < 20; i++)
                        {
                            if (ffversion == i)
                            {
                                msg = "FF" + i + "x";
                                break;
                            }
                        }
                    }
                    else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
                    {
                        var ieversion = new Number(RegExp.$1)

                        for (var i = 1; i < 20; i++)
                        {
                            if (ieversion == i)
                            {
                                msg = "IE" + i + "x";
                                break;
                            }
                        }
                    }

                    alert(msg); // return msg; 
                }

           </script>
...