Automatyczne wykrywanie przeglądarki mobilnej (przez user-agent?) [zamknięte]

Jak mogę wykryć, czy użytkownik przegląda moją stronę internetową z mobilnej przeglądarki internetowej, aby móc automatycznie wykryć i wyświetlić odpowiednią wersję mojej strony internetowej?

Author: Vinko Vrsalovic, 2009-06-17

16 answers

Tak, odczytanie nagłówka User-Agent załatwi sprawę.

Jest kilka List out tam znanych agentów użytkowników mobilnych, więc nie trzeba zaczynać od zera. To, co zrobiłem, gdy musiałem, to zbudować bazę znanych agentów użytkowników i przechowywać niewiadome, gdy są wykrywane do rewizji, a następnie ręcznie dowiedzieć się, czym są. Ta ostatnia rzecz może być przesadą w niektórych przypadkach.

Jeśli chcesz to zrobić na poziomie Apache, możesz utworzyć skrypt, który okresowo generuje zestaw reguł przepisywania sprawdzających agenta użytkownika (lub po prostu raz i zapomnij o agentach nowych użytkowników, lub raz w miesiącu, cokolwiek pasuje do twojego przypadku), jak

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (OneMobileUserAgent|AnotherMobileUserAgent|...)
RewriteRule (.*) mobile/$1

Które przeniesie np. żądania do http://domain/index.html do http://domain/mobile/index.html

Jeśli nie podoba Ci się podejście polegające na tym, że skrypt odtwarza okresowo plik htaccess, możesz napisać moduł, który sprawdza User Agent (nie znalazłem już takiego wykonanego, ale okazało się, że jest to szczególnie odpowiedni przykład ) i uzyskać agentów użytkowników z niektórych witryn, aby je zaktualizować. Wtedy możesz skomplikować podejście tak bardzo, jak chcesz, ale myślę, że w Twoim przypadku poprzednie podejście byłoby w porządku.

 91
Author: Vinko Vrsalovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-17 04:56:46

Istnieją Skrypty open source na Detect Mobile Browser, które robią to w Apache, ASP, ColdFusion, JavaScript i PHP.

 126
Author: Chad Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-07 22:54:38

Tak sobie pomyślałem, ale co, jeśli pracowałbyś nad tym problemem z przeciwnej strony? Zamiast określać, które przeglądarki są mobilne, dlaczego nie określić, które przeglądarki nie są? Następnie Zakoduj swoją witrynę do domyślnej wersji mobilnej i Przekieruj do wersji standardowej. Istnieją dwie podstawowe możliwości przeglądania mobilnej przeglądarki. Albo ma obsługę javascript, albo nie. więc jeśli przeglądarka nie ma obsługi javascript, domyślnie będzie to wersja mobilna. Jeśli ma Obsługa JavaScript, Sprawdź rozmiar ekranu. Wszystko poniżej określonego rozmiaru będzie prawdopodobnie również przeglądarką mobilną. Wszystko większe zostanie przekierowane do standardowego układu. Następnie wszystko, co musisz zrobić, to określić, czy użytkownik z wyłączonym JavaScript jest mobilny, czy nie.
Według W3C liczba użytkowników z wyłączonym JavaScript wynosiła około 5%, a większość z nich wyłączyła go, co oznacza, że faktycznie wiedzą, co robią z przeglądarką. Czy są one dużą częścią twojego publiczność? Jeśli nie, to nie martw się o nich. Jeśli tak, to jaki jest najgorszy scenariusz? Masz tych użytkowników, którzy przeglądają mobilną wersję Twojej witryny, i to dobrze.

 33
Author: midsever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 05:29:27

Oto Jak to robię w JavaScript:

function isMobile() {
  var index = navigator.appVersion.indexOf("Mobile");
  return (index > -1);
}

Zobacz przykład na www.tablemaker.net/test/mobile.html gdzie potraja rozmiar czcionki w telefonach komórkowych.

 31
Author: Ed Poor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-19 14:34:49

Moim ulubionym mechanizmem wykrywania przeglądarek mobilnych jest WURFL . Jest często aktualizowany i działa z każdą główną platformą programistyczną / językową.

 17
Author: Pablo Santa Cruz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 14:35:41

Rozważałeś użycie CSS3 media queries? W większości przypadków można zastosować niektóre style css specjalnie dla docelowego urządzenia bez konieczności tworzenia osobnej mobilnej wersji witryny.

@media screen and (max-width:1025px) {
   #content {
     width: 100%;
   }
}

Możesz ustawić szerokość na dowolną, ale 1025 złapie widok krajobrazowy iPada.

Będziesz również chciał dodać następujący meta tag do swojej głowy:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

Sprawdź Ten artykuł w HTML5 Rocks dla kilku dobrych przykładów

 17
Author: Cory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-26 19:03:42

Dla ANDROID , IPHONE, IPAD, BLACKBERRY, PALM, WINDOWS CE, PALM

 <script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>------------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>------------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
                   else if ((userAgent.search("blackberry") > -1))
                       document.write("<b> BLACKBERRY DEVICE <br>")
                   else if ((userAgent.search("iphone") > -1))
                       document.write("<b> IPHONE DEVICE <br>")              
                   else if ((userAgent.search("ipod") > -1))
                       document.write("<b> IPOD DEVICE <br>")
               else if ((userAgent.search("ipad") > -1))
                       document.write("<b> IPAD DEVICE <br>")
                       else
                   document.write("<b> UNKNOWN DEVICE <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>
 13
Author: Jorgesys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 17:21:00

Plik przeglądarki urządzenia mobilnego to świetny sposób na wykrywanie mobilnych (i innych) przeglądarek dla ASP.NET projekty: http://mdbf.codeplex.com/

 6
Author: mjf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-17 14:46:18

Możesz wykryć klientów mobilnych po prostu przez navigator.userAgent, i załadować alternatywne Skrypty na podstawie wykrytego typu klienta jako:

 $(document).ready(function(e) {

        if(navigator.userAgent.match(/Android/i)
          || navigator.userAgent.match(/webOS/i)
          || navigator.userAgent.match(/iPhone/i)
          || navigator.userAgent.match(/iPad/i)
          || navigator.userAgent.match(/iPod/i)
          || navigator.userAgent.match(/BlackBerry/i)
          || navigator.userAgent.match(/Windows Phone/i)) {

         //write code for your mobile clients here.

          var jsScript = document.createElement("script");
          jsScript.setAttribute("type", "text/javascript");
          jsScript.setAttribute("src", "js/alternate_js_file.js");
          document.getElementsByTagName("head")[0].appendChild(jsScript );

          var cssScript = document.createElement("link");
          cssScript.setAttribute("rel", "stylesheet");
          cssScript.setAttribute("type", "text/css");
          cssScript.setAttribute("href", "css/alternate_css_file.css");
          document.getElementsByTagName("head")[0].appendChild(cssScript); 

    }
    else{
         // write code for your desktop clients here
    }

    });
 5
Author: sohel khalifa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 18:08:31

Możesz sprawdzić ciąg User-Agent. W JavaScript jest to naprawdę proste, jest to po prostu właściwość obiektu navigator.

var useragent = navigator.userAgent;

Można sprawdzić, czy urządzenie, jeśli iPhone lub Blackberry w JS z czymś takim

var isIphone = !!agent.match(/iPhone/i),
    isBlackberry = !!agent.match(/blackberry/i);

Jeśli isIphone jest prawdą, że uzyskujesz dostęp do witryny z Iphone ' a, jeśli isBlackBerry uzyskujesz dostęp do witryny z Blackberry.

Możesz użyć wtyczki" UserAgent Switcher " dla Firefoksa, aby to przetestować.

Jeśli jesteś również zainteresowany, może warto sprawdza mój skrypt " redirection_mobile.js " hosted on github here https://github.com/sebarmeli/JS-Redirection-Mobile-Site i możesz przeczytać więcej szczegółów w jednym z moich artykułów tutaj:

Http://blog.sebarmeli.com/2010/11/02/how-to-redirect-your-site-to-a-mobile-version-through-javascript/

 4
Author: sebarmeli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-14 10:56:12
protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Browser.IsMobileDevice == true)
    {
        Response.Redirect("Mobile//home.aspx");
    }
}

Ten przykład działa w asp.net

 4
Author: shiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 20:08:05

Nie powiedziałeś, jakiego języka używasz. Jeśli jest to Perl to jest trywialne:

use CGI::Info;

my $info = CGI::Info->new();

if($info->is_mobile()) {
   # Add mobile stuff
}

unless($info->is_mobile()) {
   # Don't do some things on a mobile
}
 3
Author: Nigel Horne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-13 20:49:59

Yes user-agent służy do wykrywania przeglądarek mobilnych. Dostępnych jest wiele darmowych skryptów, aby to sprawdzić. Oto jeden z takich kodu php, który pomoże przekierować użytkowników mobilnych do różnych stron internetowych.

 0
Author: Shoban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-17 04:46:42

Umieściłem to demo ze skryptami i przykładami dołączonymi razem:

Http://www.mlynn.org/2010/06/mobile-device-detection-and-redirection-with-php/

Ten przykład wykorzystuje funkcje php do wykrywania agenta użytkownika i oferuje dodatkową korzyść polegającą na umożliwieniu użytkownikom określenia preferencji dla wersji witryny, która zazwyczaj nie byłaby domyślna w oparciu o typ przeglądarki lub urządzenia. Odbywa się to za pomocą Plików cookie (utrzymywanych przy użyciu php po stronie serwera jako w przeciwieństwie do javascript.)

Pamiętaj, aby sprawdzić link do pobrania w artykule dla przykładów.

Mam nadzieję, że się spodoba!

 0
Author: Mike Lynn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-09 17:07:18

MobileESP posiada PHP, Java, APS.NET (C#), Ruby i JavaScript. posiada również licencję Apache 2, więc jest darmowa do użytku komercyjnego. Najważniejsze dla mnie jest to, że identyfikuje tylko przeglądarki i platformy, a nie rozmiary ekranu i inne metryki, co sprawia, że jest ładny i mały.

 0
Author: rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-15 14:37:21

Jest zupełnie nowe rozwiązanie wykorzystujące Zend Framework. Zacznij od linku do Zend_HTTP_UserAgent:

Http://framework.zend.com/manual/en/zend.http.html

 -1
Author: joedevon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-02 16:10:33