2012-01-24 39 views
0

我正在寻找写一个单一的,现代的和最新的JavaScript函数(或找到一个) - 大约2012年 - 这将可靠地检测浏览器。 (伪代码):JavaScript:检测浏览器库函数 - 是否存在?

function detectBrowser(){ 
    if IE{ 
     /* code to detect IE version/quirks mode */ 
     return an object containing IE version and boolean for quirks mode? 
    } 
    else if WebKit{ 
     /* same thing. return browser */ 
    } 
    else if Gecko{ 
     /* same thing. */ 
    } 
} 

任何人都知道类似的东西?因为我知道会有人问“你为什么要这样做?”,我只是想要这样一个功能,以便我可以在不同场景下构建它,比如加载基于浏览器的不同样式表。

+5

对于一个现代和先进的 - 这样做的方式我会建议调查[Modernizr](http://www.modernizr.com/);功能检测而不是浏览器嗅探。 – jabclab

+0

确实。现在很少做浏览器检测。您应该依靠功能检测来代替。话虽如此,我认为大多数浏览器检测通常由用户代理嗅探完成。 –

回答

2

如果你已经使用jQuery的选项,有jQuery.browser,然而,这已被弃用,他们建议使用jQuery.support,其具有告诉你属性的整体筏什么浏览器是否支持。请参阅:http://api.jquery.com/jQuery.support/

对于你的样式呈现例子,你甚至都不需要使用脚本,可以使用类似的语句实现它的HTML里面:

<!--[if IE 6]> 
<link rel="stylesheet" type="text/css" href="ie6.css" /> 
<![endif]--> 
0
enter code here 

<?php 
function getBrowser() 
{ 
$u_agent = $_SERVER['HTTP_USER_AGENT']; 
$bname = 'Unknown'; 
$platform = 'Unknown'; 
$version= ""; 

//First get the platform? 
if (preg_match('/linux/i', $u_agent)) { 
    $platform = 'linux'; 
} 
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { 
    $platform = 'mac'; 
} 
elseif (preg_match('/windows|win32/i', $u_agent)) { 
    $platform = 'windows'; 
} 

// Next get the name of the useragent yes seperately and for good reason 
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
{ 
    $bname = 'Internet Explorer'; 
    $ub = "MSIE"; 
} 
elseif(preg_match('/Firefox/i',$u_agent)) 
{ 
    $bname = 'Mozilla Firefox'; 
    $ub = "Firefox"; 
} 
elseif(preg_match('/Chrome/i',$u_agent)) 
{ 
    $bname = 'Google Chrome'; 
    $ub = "Chrome"; 
} 
elseif(preg_match('/Safari/i',$u_agent)) 
{ 
    $bname = 'Apple Safari'; 
    $ub = "Safari"; 
} 
elseif(preg_match('/Opera/i',$u_agent)) 
{ 
    $bname = 'Opera'; 
    $ub = "Opera"; 
} 
elseif(preg_match('/Netscape/i',$u_agent)) 
{ 
    $bname = 'Netscape'; 
    $ub = "Netscape"; 
} 

// finally get the correct version number 
$known = array('Version', $ub, 'other'); 
$pattern = '#(?<browser>' . join('|', $known) . 
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; 
if (!preg_match_all($pattern, $u_agent, $matches)) { 
    // we have no matching number just continue 
} 

// see how many we have 
$i = count($matches['browser']); 
if ($i != 1) { 
    //we will have two since we are not using 'other' argument yet 
    //see if version is before or after the name 
    if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){ 
     $version= $matches['version'][0]; 
    } 
    else { 
     $version= $matches['version'][1]; 
    } 
} 
else { 
    $version= $matches['version'][0]; 
} 

// check if we have a number 
if ($version==null || $version=="") {$version="?";} 

return array(
    'userAgent' => $u_agent, 
    'name'  => $bname, 
    'version' => $version, 
    'platform' => $platform, 
    'pattern' => $pattern 
); 
} 

// now try it 
$ua=getBrowser(); 
echo $yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on "  .$ua['platform'] . " reports: <br >" . $ua['userAgent']; 
//print_r($yourbrowser); 
?> 
相关问题