2016-02-01 3 views
1

Недавно я наткнулся на этот сайт: LocalMapsAccess, где, когда я открываю сайт с Chrome, в сноске я мог видеть это изображение:Как служить различным содержанием на основе браузера

Chrome Footer

И в Firefox, то же сайт показывает различное содержание:

Firefox Footer

Я хочу, чтобы это реализовать, но я невежествен, что я должен делать и как я могу начать с. Может кто-нибудь, пожалуйста, помогите мне в этом? Заранее спасибо.

+0

После просмотра кода сайта, похоже, что они используют какой-то метод обхода браузером. Это можно сделать, получив строку User Agent String клиента. Это плохой метод, но в основном работает, поскольку Пользовательский агент может быть легко подделан **. –

+0

Используйте объект 'navigator' из спецификации. – Jai

+0

@Jai Что такое спецификация? –

ответ

4

После просмотра кода сайта, похоже, что они используют какой-то метод обхода браузером. Это можно сделать, получив строку User Agent String клиента. Это плохой метод, но в основном работает, поскольку User Agent может быть легко подделан.

Хорошо для вас, решение:

  1. стороне сервера с помощью PHP.
    Вам необходимо использовать $_SERVER['HTTP_USER_AGENT'].

  2. Сторона клиента с использованием JavaScript.
    Вам необходимо использовать navigator.userAgent.

Решение с использованием PHP

Если вы видите get_browser() руководство в PHP документации, есть комментарий по ruudrp at live dot nl пять лет назад.

Если поместить этот код в PHP:

<?php 
    header("Content-type: text/plain"); 
    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(); 
    $yourbrowser = "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports:\n" . $ua['userAgent']; 
    print_r($yourbrowser); 
?> 

Я просто пытаюсь добавить код здесь. Пожалуйста, смотрите, но это должно быть ответом.


Обновление: PHP код вывода.

Вы получите следующее:

  1. Chrome Browser

    Your browser: Google Chrome 47.0.2526.111 on windows reports: 
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 
    
  2. Браузер Firefox

    Your browser: Mozilla Firefox 42.0 on windows reports: 
    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0 
    
  3. Internet Explorer

    Your browser: Unknown ? on windows reports: 
    Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; managedpc; rv:11.0) like Gecko 
    

Хорошо, приведенный выше код не работает в Internet Explorer 11 на Windows 7. Во всяком случае, кто беспокоится об IE сейчас-в-днях.


Final Update

Теперь на основе приведенного выше кода, вы можете проверить этот способ доставки разное содержание в различных браузерах с вашей стороны сервера.

<?php 
    // The same function to be called. 
    $ua = getBrowser(); 
    // Let's check for our required values. 
    if ($ua['name'] == "Mozilla Firefox") 
     // Add Firefox's content. 
     echo "firefox.png"; 
    elseif ($ua['name'] == "Google Chrome") 
     // Add Chrome's content. 
     echo "chrome.png"; 
    else 
     // Finally add our devastated IE's content. 
     echo "ie.png"; 
?> 

Надеюсь, что это поможет.

+0

Да, я использую только PHP. PHP решение было бы здорово. –

+0

@nandhakumar Да, это код. Последний. Проверьте это. –

+0

Хорошо, это выглядит многообещающе. Позвольте мне попытаться вернуться. –

Смежные вопросы