2011-04-26 66 views
18

如何檢測瀏覽器類型及其在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) 
+1

嗅探HTTP_USER_AGENT是實現它的傳統方式。其他應用程序可能會欺騙您的代碼,或者用戶將更改其瀏覽器的簽名以欺騙您,因此不要明確信任它。 – 2011-04-26 08:56:25

回答

21

嘗試瀏覽器寶石的方法。很簡單,可以解決你的目的。

你可以找到很容易使用的寶石Here

3

你所做的是實際上做到這一點的方法。現在,您可以使用正則表達式處理用戶代理信息,在Firefox,Chrome或任何其他瀏覽器或您喜歡的版本上查找匹配項。

+0

@SyedRaza Google也可以爲你解決這個問題。我的意思是,問'我該如何去做這個和那個'沒什麼錯,但是假設人們會在這裏爲你做你的工作,而你已經知道'我怎麼'是一種懶惰。 – Mosselman 2012-10-30 09:44:43

+0

我們有什麼方法可以檢測到瀏覽器版本是否最新?提前致謝。 – 2016-07-22 07:09:31

27

注意:小心一些搜索引擎認爲這是一種入侵見(谷歌HTTP用戶代理)

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

或在Firefox

的情況下
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 
8

還有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 
+0

非常感謝。正是我想要的:D – 2014-06-24 03:05:32

0

雖然這是一個前端解決方案,我更喜歡以檢查是必需的,如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' 
}