2009-12-13 14 views
6

Come posso rilevare se l'utente non sta utilizzando nessuno dei browser Chrome, Firefox o Internet Explorer utilizzando JavaScript o PHP?Come posso rilevare il browser con PHP o JavaScript?

+0

potrei sottolineare che conoscendo il browser è utile solo fino a quando l'agente-stringa non è stata modificata ... Sto indovinando si conosce già questo tho. – jcolebrand

risposta

15

Il modo migliore per farlo in JS che ho trovato è Quirksmode. Ho fatto uno per PHP che dovrebbe funzionare con i browser più comuni:

$browser = array(
    'version' => '0.0.0', 
    'majorver' => 0, 
    'minorver' => 0, 
    'build'  => 0, 
    'name'  => 'unknown', 
    'useragent' => '' 
); 

    $browsers = array(
    'firefox', 'msie', 'opera', 'chrome', 'safari', 'mozilla', 'seamonkey', 'konqueror', 'netscape', 
    'gecko', 'navigator', 'mosaic', 'lynx', 'amaya', 'omniweb', 'avant', 'camino', 'flock', 'aol' 
); 

    if (isset($_SERVER['HTTP_USER_AGENT'])) { 
    $browser['useragent'] = $_SERVER['HTTP_USER_AGENT']; 
    $user_agent = strtolower($browser['useragent']); 
    foreach($browsers as $_browser) { 
     if (preg_match("/($_browser)[\/ ]?([0-9.]*)/", $user_agent, $match)) { 
     $browser['name'] = $match[1]; 
     $browser['version'] = $match[2]; 
     @list($browser['majorver'], $browser['minorver'], $browser['build']) = explode('.', $browser['version']); 
     break; 
     } 
    } 
    } 
+0

così leggo in giro e questo è quello che ho trovato ... sia che sia php o javascript, entrambi ottengono l'informazione che il browser è attraverso httfeader, anche il modo in cui funziona Apache. Correggere se sbaglio. –

6

Esiste effettivamente una funzione in PHP per questo, get_browser.

+0

Molto interessante, non ero a conoscenza di questa funzione. grazie per le informazioni – user103219

+4

Quella funzione richiede browsecap.ini, che non è core PHP. –

+0

Vero. Ecco una versione php pura di questa funzione. Aggiorna automaticamente anche il file del browser. http://code.google.com/p/phpbrowscap/ – txyoji

7

Ecco il codice JavaScript attraverso il quale è possibile rilevare facilmente il browser.

var userAgent = navigator.userAgent.toLowerCase(); 

    // Figure out what browser is being used. 
    var Browser = { 
     Version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1], 
     Chrome: /chrome/.test(userAgent), 
     Safari: /webkit/.test(userAgent), 
     Opera: /opera/.test(userAgent), 
     IE: /msie/.test(userAgent) && !/opera/.test(userAgent), 
     Mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent), 
     Check: function() { alert(userAgent); } 
    }; 

    if (Browser.Chrome || Browser.Mozilla) { 
     // Do your stuff for Firefox and Chrome. 
    } 
    else if (Browser.IE) { 
     // Do something related to Internet Explorer. 
    } 
    else { 
     // The browser is Safari, Opera or some other. 
    } 
1

In PHP Io uso il valore $_SERVER['HTTP_USER_AGENT'] e attaccare con regex o stristr.

0

Il modo più semplice per farlo con JavaScript è

<script language="Javascript"> 
    location.href = 'URL_TO_FORWARD_TO'; 
</script> 

All'interno del location.href, è possibile utilizzare una variabile PHP in questo modo:

<script language="Javascript"> 
    location.href = '<?php echo $_SERVER['QUERY_STRING']; ?>'; 
</script> 

Questo vorrebbe un URL dato come una query lo script PHP e inoltrare a quell'URL. Lo script si chiamerebbe così:

http://your-server/path-to-script/script.php?URL_TO_FORWARD_TO 

Buona fortuna.

+4

Risposta alla domanda sbagliata, forse? –

5

PHP codice get_browser() è totalmente lavorando per me;)

<?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 separately 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(); 
    $yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " . 
        $ua['platform'] . " reports: <br >" . $ua['userAgent']; 
    print_r($yourbrowser); 
?> 
1

Questo può essere il modo semplice per sapere che il browser non utilizza IE, Chrome, o FF

if (navigator.userAgent.indexOf("Chrome") != -1) 
    BName = "Chrome"; 
if (navigator.userAgent.indexOf("Firefox") != -1) 
    BName = "Firefox"; 
if (navigator.userAgent.indexOf("MSIE") != -1) 
    BName = "IE"; 

if(BName=='Chrome' || BName=='Firefox' || BName=='IE') 
    BName="Not other"; 
else BName="other"; 
alert(BName); 
1

Forse questa classe in JS

function CSystemInfo(){ 
    var self = this; 

    self.nScreenWidth = 0; 
    self.nScreenHeight = 0; 
    self.sPlatform = "Unknown"; 
    self.sBrowser = "Unknown"; 

    var init = function(){ 
     self.nScreenWidth = screen.width; 
     self.nScreenHeight = screen.height; 
     self.sPlatform = navigator.platform; 
     self.sBrowser = getBrowser(); 
    } 

    var getBrowser = function(){ 
     var userAgent = navigator.userAgent; 
     var version = "UNKNOWN VERSION"; 

     if (userAgent.toLowerCase().indexOf('msie') > -1) { 
      var ieversionreg = /(MSIE ([0-9]{1,2}\.[0-9]{1,2}))/; 
      if(ieversionreg.test(userAgent)){ 
       version = ieversionreg.exec(userAgent)[2]; 
      } 
      return 'Internet Explorer '+version; 
     } 
     else if (userAgent.toLowerCase().indexOf('firefox') > -1){ 
      var ffversionreg = /(Firefox\/(.+))/; 
      if(ffversionreg.test(userAgent)){ 
       version = ffversionreg.exec(userAgent)[2]; 
      } 
      return 'Firefox '+version; 
     } 
     else if (userAgent.toLowerCase().indexOf('chrome') > -1){ 
      var chromereg = /Chrome\/([0-9]{1,2})/; 
      if(chromereg.test(userAgent)){ 
       version = chromereg.exec(userAgent)[1]; 
      } 
      return 'Google Chrome '+version; 
     } 
     else return 'Unknown'; 
    } 

    init(); 
} 

un'istanza chiamando

var oInfo = new CSystemInfo(); 
// Retrieve infos 
oInfo.sBrowser; // Google Chrome 21 
0

L'introduzione di IE 11 ha reso questo metodo obsoleto, anche se ho aggiornato a tenerne conto. È molto meglio usare JavaScript e il rilevamento delle funzioni. Certo, a volte vuoi solo uccidere completamente un browser e/o doverlo ospitare per il caso d'uso in cui JavaScript può essere disabilitato.

Non conosco l'obiettivo finale dell'OP, ma nel mio caso tutto ciò che volevo veramente fare era rimbalzare i browser di Balmer. Quello che avevamo a disposizione era fallito per gli utenti di IE 10 a causa di un falso positivo causato da un'espressione regolare simile a un'altra soluzione. (Non so se la regex in questo thread causi lo stesso falso positivo o no, ma so che quello in questa pagina non è lo stesso di quello rotto che avevamo).

Ho inventato un metodo che non si basava su un'espressione regolare (di per sé). Inoltre, non volevo imbattermi in uno scenario in cui dovevo modificare lo script per adattarlo ai nuovi browser, tuttavia, la modifica dello script per far scadere i browser obsoleti in futuro è accettabile.

function obsolete_browser(){ 
$ua = (isset($_SERVER['HTTP_USER_AGENT']))?$_SERVER['HTTP_USER_AGENT']:''; 
$browser = explode(';',$ua); 
foreach($browser as &$b){ 
    $b = trim($b); // remove the spaces 
    $c = explode('.',$b); // major revision only please 
    if($c[0]){ $b = $c[0]; } 
} 
if(in_array("Trident/7",$browser)){ // IE11 
    return false; 
} else if(in_array('MSIE 4',$browser) 
|| in_array('MSIE 5',$browser) 
|| in_array('MSIE 6',$browser) 
|| in_array('MSIE 7',$browser) 
// || in_array('MSIE 8',$browser) // we'll need this soon enough, right? 
|| in_array('BOLT/2',$browser) // worst browser ever 
){ 
    return true; 
} 
return false; 
} 
2

1) 99,9% rilevatore preciso: BrowserDetection.php (Examples)

2) funzione più semplice (ma impreciso per ingannare):

<?php 
function get_user_browser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT'];  $ub = ''; 
    if(preg_match('/MSIE/i',$u_agent))   { $ub = "ie";  } 
    elseif(preg_match('/Firefox/i',$u_agent)) { $ub = "firefox"; } 
    elseif(preg_match('/Safari/i',$u_agent)) { $ub = "safari"; } 
    elseif(preg_match('/Chrome/i',$u_agent)) { $ub = "chrome"; } 
    elseif(preg_match('/Flock/i',$u_agent)) { $ub = "flock";  } 
    elseif(preg_match('/Opera/i',$u_agent)) { $ub = "opera";  } 
    return $ub; 
} 
?> 
0

Semplicemente Java Script che rileva la tua browser, basta chiamare questo func zione:

<script> 
function which_browser() { 

//browser_flag --> 0 --> Opera, Chrome, Safari, Firefox 
//browser_flag --> 1 --> Internet Explorer 
var browser_flag = 0; 

if((navigator.userAgent.indexOf("Opera") || navigator.userAgent.indexOf('OPR')) != -1) 
{ 
    alert('Opera --> browser_flag = ' + browser_flag); 
} 
else if(navigator.userAgent.indexOf("Chrome") != -1) 
{ 
    alert('Chrome --> browser_flag = ' + browser_flag); 
} 
else if(navigator.userAgent.indexOf("Safari") != -1) 
{ 
    alert('Safari --> browser_flag = ' + browser_flag); 
} 
else if(navigator.userAgent.indexOf("Firefox") != -1) 
{ 
    alert('Firefox --> browser_flag = ' + browser_flag); 
} 
else if((navigator.userAgent.indexOf("MSIE") != -1) || (!!document.documentMode == true)) //IF IE > 10 
{ 
    browser_flag = 1; 

    alert('IE --> browser_flag = ' + browser_flag); 
} 
else 
{ 
    alert('unknown'); 
} 


return browser_flag; 
} 
</script> 

Se IE, browser_flag ottiene 1, altro browser_flag è 0!

ovviamente regolabile

Problemi correlati