Как определить тип браузера и его версию

как я могу определить тип браузера и его версию в Rails. Я хочу проверить версию конкретного браузера и, если его версия браузера не требуется, попросить пользователя обновить ее. Я использую указанную ниже команду, но поскольку она не соответствует стандартному шаблону, я не могу ее использовать.

request.env['HTTP_USER_AGENT'] 

Chrome out put is below
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Safari out put is below
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
FireFox out put is below
Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
Opera out put is below
Opera/9.80 (Windows NT 5.1; U; en) Presto/2.8.131 Version/11.10
Internet Explorer out put is below
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)

person Syed Raza    schedule 26.04.2011    source источник
comment
Понюхать 'HTTP_USER_AGENT' — традиционный способ сделать это. Вполне возможно, что другие приложения будут подделывать ваш код или пользователь изменит подпись своего браузера, чтобы подделать вас, поэтому не доверяйте этому явно.   -  person the Tin Man    schedule 26.04.2011


Ответы (5)


Попробуйте гем браузера. Очень просто и может решить вашу цель.

Вы можете найти гем Здесь, очень простой в использовании.

person Nishutosh Sharma    schedule 11.12.2012

ПРИМЕЧАНИЕ. Будьте осторожны, некоторые поисковые системы расценивают это как тип вторжения. См. ( Google HTTP USER AGENT )

 if request.env['HTTP_USER_AGENT'] =~ /[^\(]*[^\)]Chrome\//

или в случае с фаерфоксом

if request.env['HTTP_USER_AGENT'] =~ /[^\(]*[^\)]*[^\t]Firefox\//

и проверьте это здесь, вы получите все, что вам нужно browser Gem

browsers_detection_gem

и вот метод, который может обнаружить все браузеры, так что остынь, чувак

def browser_detection
  result = request.env['HTTP_USER_AGENT']
  browser_compatible = ''
  if result =~ /Safari/
    unless result =~ /Chrome/
      version = result.split('Version/')[1].split(' ').first.split('.').first
      browser_compatible = 'Application is not functional for Safari version\'s '+version if version.to_i < 5
    else
      version = result.split('Chrome/')[1].split(' ').first.split('.').first
      browser_compatible = 'Application is not functional for Chrome version\'s '+version if version.to_i < 10
    end
  elsif result =~ /Firefox/
    version = result.split('Firefox/')[1].split('.').first
    browser_compatible = 'Application is not functional for Firefox version\'s '+version if version.to_i < 5
  elsif result =~ /Opera/
    version = result.split('Version/')[1].split('.').first
    browser_compatible = 'Application is not functional for Opera version\'s '+version if version.to_i < 11
  elsif result =~ /MSIE/
    version = result.split('MSIE')[1].split(' ').first
    browser_compatible = 'Application is not functional for Microsoft Internet Explorer version\'s '+version if version.to_i < 9
  end
  browser_compatible
end
person TH Afridi    schedule 26.04.2011

Существует также гем useragent:

<% user_agent = UserAgent.parse(request.env["HTTP_USER_AGENT"]) %>
App: <%= user_agent.application %> # Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0)
Browser: <%= user_agent.browser %> # Firefox
Version: <%= user_agent.version %> # 22.0
Platform: <%= user_agent.platform %> # Macintosh
Mobile: <%= user_agent.mobile? %> # False
OS: <%= user_agent.os %> # OS X 10.8
person Chris Edwards    schedule 26.07.2013

То, что вы делаете, на самом деле является способом сделать это. Теперь вы можете обрабатывать информацию пользовательского агента с помощью регулярного выражения, ища совпадения в Firefox, Chrome или любом другом браузере или версии, которая вам нравится.

person Spyros    schedule 26.04.2011
comment
@SyedRaza Google мог бы решить и эту проблему за вас. Я имею в виду, что нет ничего плохого в том, чтобы спрашивать «как мне сделать то и это», но предполагать, что люди будут делать вашу работу здесь за вас, в то время как вы уже знаете «как», я думаю, это немного лениво. - person Mosselman; 30.10.2012
comment
Есть ли у нас какой-либо метод, с помощью которого мы можем определить, является ли версия браузера последней или нет? Заранее спасибо. - person Mohd Anas; 22.07.2016

Хотя это решение для внешнего интерфейса, я предпочитаю проверять наличие конкретной функции, которая требуется, например, flexbox. Вы можете использовать что-то вроде Modernizr, или достаточно простой проверки JavaScript (https://stackoverflow.com/a/27047981/179311).

if(!("flexWrap" in document.documentElement.style)) {
    // IE 10, Chrome 20 and Firefox 27 and anything older will hit this.
    alert('your browser is out of date');
    // maybe this is preferred
    // window.location = '/browser-unsupported'
}
person bradlis7    schedule 30.01.2017