6

How can I detect if the user is not using any of the browsers Chrome, Firefox or Internet Explorer using JavaScript or PHP?

1
  • I might point out that knowing the browser is only useful as long as the agent-string hasn't been modified... I'm guessing you already know this tho. Commented Sep 29, 2010 at 17:42

12 Answers 12

15

The best way to do this in JS I found is on Quirksmode. I made one for PHP which should work with common browsers :

  $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;
      }
    }
  }
Sign up to request clarification or add additional context in comments.

1 Comment

so i read around and this is what i found... whether its php or javascript, they both get the information that what browser it is through httpheaders, also the way Apache does. Correct if i am wrong.
7

Here is JavaScript code through which you can easily detect the 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.
    }

Comments

6

There is actually a function in PHP for that, get_browser.

3 Comments

Very interesting, I was unaware of this function. thx for the info
That function requires browsecap.ini, which is not core PHP.
True. Here is a pure php version of this function. It auto-updates the browsecap file too. code.google.com/p/phpbrowscap
5

PHP code from get_browser() is totally working for 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);
?>

Comments

2

1) 99.9% accurate detector: BrowserDetection.php (Examples)

2) simplest function (but inaccurate for tricking) :

<?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;
}
?>

Comments

1

In PHP I use the $_SERVER['HTTP_USER_AGENT'] value and attack it with regex or stristr.

Comments

1

I use the class Browser Detect for PHP.

Comments

1

This may be simple way to know that the browser is not using IE, Chrome, or 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);

Comments

1

Did this class 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();
}

instantiate it by calling

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

Comments

0

The simplest way to do it with JavaScript is

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

Within the location.href, you could use a PHP variable like so:

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

This would take a URL given as a query to the PHP script and forward to that URL. The script would be called like this:

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

Good luck.

Comments

0

The introduction of IE 11 has made this method obsolete, though I have updated it to take that into account. It is much better to use JavaScript and feature detection. Of course, sometimes you just want to kill a browser completely and/or have to accommodate for the use case where JavaScript may be disabled.

I don't know about the OP's ultimate goal, but in my case all I really wanted to do was bounce Balmer's browsers. What we had in place failed for IE 10 users due to a false positive caused by a regex similar to another solution. (I don't know if the regex in this thread causes the same false positive or not, but I do know the one on this page is not the same as the broken one we had).

I made up a method that didn't rely on a regex (per se). I also didn't want to run into a scenario where I had to edit the script to accommodate new browsers, however, editing the script to expire obsolete browsers in the future is acceptable.

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;
}

Comments

0

Simply Java Script which detects your browser, just call this function:

    <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>

If IE, browser_flag get 1, else browser_flag is 0!

of course adjustable

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.