Rilevamento automatico del browser mobile (tramite user-agent?) [Chiuso]


291

Come posso rilevare se un utente sta visualizzando il mio sito Web da un browser Web mobile in modo da poter rilevare automaticamente e visualizzare la versione appropriata del mio sito Web?


12
IPad conta? :)
Seva Alekseyev il

33
Il commento di Seva solleva una buona domanda. Cosa significa "mobile" oggi? Si riferisce a un "telefono funzionale" che ha un browser ma non molto di uno? Si riferisce a smartphone con funzionalità complete in cui il metodo di input e la risoluzione del display sono fattori limitanti? Che ne dite di tablet che siano entrambi facili da interagire e con display ad alta risoluzione? Che ne dici di dispositivi come i media center: non escono mai dal soggiorno ma hanno limiti simili. Un amico al lavoro mi ha inviato questo. L'ho trovato molto penetrante. slideshare.net/bryanrieger/rethinking-the-mobile-web-by-yiibu
spaaarky21

1
@Ricki ma sull'iPad non è ancora possibile, ad esempio, visualizzare contenuti flash o utilizzare un editor Rich Text basato su javascript come tinymce.
TJ Ellis,

1
ipad non può visualizzare il flash, ma questo è un argomento diverso, come rilevare se il browser supporta il flash.
Shaun,

2
Solo un post dal futuro, ma chiunque sia interessato a pubblicare una versione mobile del proprio sito potrebbe essere interessato ad alcuni articoli sul "design reattivo".
Vael Victus,

Risposte:


91

Sì, leggere l'intestazione User-Agent farà il trucco.

Ci sono alcune liste fuori là di noti agenti utente di telefonia mobile in modo non c'è bisogno di ripartire da zero. Quello che ho fatto quando ho dovuto è stato quello di creare un database di agenti utente noti e archiviare gli sconosciuti quando vengono rilevati per la revisione e quindi capire manualmente cosa sono. Quest'ultima cosa potrebbe essere eccessiva in alcuni casi.

Se vuoi farlo a livello di Apache, puoi creare uno script che genera periodicamente una serie di regole di riscrittura controllando l'agente utente (o solo una volta e dimentica i nuovi agenti utente, o una volta al mese, qualunque sia adatto al tuo caso), come

RewriteEngine On

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

che sposta, ad esempio, le richieste a http: //domain/index.html in http: //domain/mobile/index.html

Se non ti piace l'approccio con uno script che ricrea periodicamente un file htaccess, puoi scrivere un modulo che controlla l'Utente Utente (non ne ho trovato uno già fatto, ma ho trovato questo esempio particolarmente appropriato ) e ottenere gli User Agent da alcuni siti per aggiornarli. Quindi puoi complicare l'approccio quanto vuoi, ma penso che nel tuo caso l'approccio precedente andrebbe bene.


3
Questo può essere realizzato a livello di server Web (Apache) tramite un qualche tipo di comando .htaccess - invece di usare un linguaggio di scripting come PHP?

qualsiasi idea di impostare il root del documento da user-agent
Carson

126

Esistono script open source su Detect Mobile Browser che lo fanno in Apache, ASP, ColdFusion, JavaScript e PHP.


5
@guitar In tal caso, devi inviare la tua UA.
Adam Tuttle,

9
Bleh ... Non mi piace molto l '"odore di codice" di queste soluzioni. Corrispondenza del Regex utilizzando un gruppo di prefissi di 4 caratteri senza alcun indizio su da dove provenissero ... no grazie.
Siamo tutti Monica,

2
Questa è una dichiarazione regex nobile. Sono d'accordo, l'odore del codice non è buono su questo.
Jack Cox,

5
Inoltre, non mi piacciono le soluzioni "Open Source" senza licenza e nessuna indicazione di aggiornamenti.
Eduardo,

12
Non c'è modo di aggirarlo però. Ad un certo livello qualsiasi tipo di soluzione eseguirà un controllo regex sul programma utente.
Kyle,

33

Solo un pensiero, ma cosa succede se hai risolto questo problema dalla direzione opposta? Invece di determinare quali browser sono mobili, perché non determinare quali browser non lo sono? Quindi codifica il tuo sito per impostazione predefinita alla versione mobile e reindirizza alla versione standard. Esistono due possibilità di base quando si guarda un browser mobile. O ha il supporto javascript o no. Quindi, se il browser non supporta javascript, passerà automaticamente alla versione mobile. Se ha il supporto JavaScript, controlla le dimensioni dello schermo. Qualunque cosa al di sotto di una certa dimensione sarà probabilmente anche un browser mobile. Qualunque cosa più grande verrà reindirizzata al layout standard. Quindi tutto ciò che devi fare è determinare se l'utente con JavaScript disabilitato è mobile o meno.
Secondo il W3C il numero di utenti con JavaScript disabilitato era di circa il 5% e di quegli utenti la maggior parte lo ha disattivato, il che implica che sanno effettivamente cosa stanno facendo con un browser. Sono gran parte del tuo pubblico? Altrimenti, non preoccuparti per loro. In tal caso, qual è lo scenario peggiore? Hai quegli utenti che navigano nella versione mobile del tuo sito, e questa è una buona cosa.


3
Questa è un'ottima idea, penso che sia una soluzione elegante.
Maxim Veksler,

3
+1 sembra un'idea abbastanza dolce, ma ciò influenzerebbe i crawler dei motori di ricerca?
Mikey G,

Questa è un'idea sbagliata. Le estensioni del browser che disabilitano javascript sono molto popolari nei browser desktop, quindi supponendo che nessun javascript significhi che il mobile è semplicemente sbagliato. La risoluzione della finestra / finestra / schermo non ha nulla a che fare con le dimensioni di un browser e supponendo che la bassa risoluzione indichi che le dimensioni del palmare renderanno la tua app Web brutta e frustrante per molti utenti. (Ad esempio: browser desktop in finestre non a schermo intero, tablet di grandi dimensioni.)
ɈsәɹoɈ

31

Ecco come lo faccio in JavaScript:

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

Guarda un esempio su www.tablemaker.net/test/mobile.html dove triplica la dimensione del carattere sui telefoni cellulari.


se vuoi unire i tuoi account vedi qui: meta.stackexchange.com/questions/18232/…
Brandon

Questo non funzionerà quando si tratta di tablet (ad es. IPad)
Si8

Usa "mobi" a causa di Opera Mobile.
mgutt,

1
E hai bisogno di "Opera Mini" in quanto questo è uno dei rari browser che non utilizzano "mobi" in User Agent.
mgutt,

17

Il mio meccanismo preferito di rilevamento del browser mobile è WURFL . Viene aggiornato frequentemente e funziona con tutte le principali piattaforme di programmazione / linguaggio.


È buono, ma l'affermazione "funziona con tutte le principali piattaforme di programmazione / linguaggio" è un po 'audace.
Kyle,


Ora è disponibile solo con la fastidiosa licenza AGPL, a meno che non lo acquisti. en.wikipedia.org/wiki/WURFL#License_update
MarkJ

17

Hai preso in considerazione l'utilizzo di media query css3? Nella maggior parte dei casi è possibile applicare alcuni stili CSS specificamente per il dispositivo di destinazione senza dover creare una versione mobile separata del sito.

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

Puoi impostare la larghezza come preferisci, ma 1025 catturerà la vista orizzontale dell'iPad.

Ti consigliamo anche di aggiungere il seguente meta tag alla tua testa:

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

Dai un'occhiata a questo articolo su HTML5 Rocks per alcuni buoni esempi


1
Penso che questo sia in realtà il modo migliore per andare. Gli script che esaminano le stringhe di User Agent sono destinati a diventare obsoleti. Guardando gli immobili disponibili sullo schermo è possibile progettare in modo reattivo senza preoccuparsi che non vengano rilevati nuovi dispositivi.
Adam Tuttle,

1
Funziona solo per il rilevamento sul lato client. Ma se vuoi che il tuo server si comporti in modo diverso per i client mobili, dovrai usare qualche altra tecnica.
Igor Brejc,

Ciò fallisce miseramente per i browser desktop che non eseguono lo schermo intero. Se scegli di farlo comunque, ti preghiamo di non sprecare spazio sullo schermo con enormi caratteri e margini, o nascondere importanti funzionalità / informazioni dietro i menu a discesa. Renderà il tuo sito / app brutto e frustrante per alcuni dei tuoi utenti.
ʇsәɹoɈ

13

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

L'ho trovato abbastanza utile.
Bozdoz,

Dovresti assolutamente dare un'occhiata a Conditionizr che gestirà tutto questo per te! È possibile aggiungere test personalizzati, recuperarli tramite test degli oggetti e avere richiamate. Hanno anche disponibile una serie di test
preliminari

Elenasys, grazie per la risposta utile. Tuttavia, non riesco a trovare alcun UA corrispondente "windows \ sce" nel mio db.
Nefski,

1
Questo non funziona per Windows Phone.
jwerre,

grazie ma Windows Phone non è stato specificato ...
Jorgesys,

6

Il file del browser del dispositivo mobile è un ottimo modo per rilevare broswer mobili (e altri) per progetti ASP.NET: http://mdbf.codeplex.com/


Mobile Device Browser funziona ancora? Ho notato che c'è una notazione sul fatto che sia offline? ...
creativeedg10

5

È possibile rilevare i client mobili semplicemente tramite navigator.userAgente caricare script alternativi basati sul tipo di client rilevato come:

 $(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
    }

    });

Per una soluzione più gestibile, puoi usare Conditionizr che gestirà tutto questo per te! È possibile aggiungere test personalizzati, recuperarli tramite test degli oggetti e avere richiamate. Hanno anche disponibile una serie di test
preliminari

4

È possibile controllare la stringa User-Agent. In JavaScript, è davvero facile, è solo una proprietà dell'oggetto navigatore.

var useragent = navigator.userAgent;

Puoi verificare se il dispositivo è iPhone o Blackberry in JS con qualcosa di simile

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

se isIphone è vero stai accedendo al sito da un Iphone, se isBlackBerry stai accedendo al sito da un Blackberry.

È possibile utilizzare il plug-in "UserAgent Switcher" per Firefox per testarlo.

Se anche tu sei interessato, potrebbe valerne la pena dare un'occhiata al mio script "redirection_mobile.js" ospitato su github qui https://github.com/sebarmeli/JS-Redirection-Mobile-Site e puoi leggere maggiori dettagli in uno dei il mio articolo qui:

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


1
L'uso di .match è sbagliato qui, vuoi usare .test () che valuta un valore booleano, è anche molto più veloce di .match () e non restituisce un array. Per una soluzione più gestibile per il tuo test UserAgent, puoi usare Conditionizr che gestirà tutto questo per te! È possibile aggiungere test personalizzati, recuperarli tramite test degli oggetti e avere richiamate. Hanno anche una serie di test
premade

4
protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Browser.IsMobileDevice == true)
    {
        Response.Redirect("Mobile//home.aspx");
    }
}

Questo esempio funziona in asp.net



0

Sì, l'agente utente viene utilizzato per rilevare i browser mobili. Ci sono molti script gratuiti disponibili per verificare questo. Ecco uno di questi codici php che ti aiuterà a reindirizzare gli utenti di dispositivi mobili a siti Web diversi.


1
Questo può essere realizzato a livello del server Web (Apache) tramite un qualche tipo di comando .htaccess - invece di usare PHP?

0

Ho messo questa demo con script ed esempi inclusi insieme:

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

Questo esempio utilizza le funzioni php per il rilevamento dell'agente utente e offre l'ulteriore vantaggio di consentire agli utenti di indicare una preferenza per una versione del sito che in genere non sarebbe quella predefinita in base al browser o al tipo di dispositivo. Questo viene fatto con i cookie (mantenuti usando php sul lato server invece di JavaScript).

Assicurati di controllare il link per il download nell'articolo per gli esempi.

Spero ti diverta!


0

MobileESP ha hook PHP, Java, APS.NET (C #), Ruby e JavaScript. ha anche la licenza Apache 2, quindi gratuita per uso commerciale. La cosa fondamentale per me è che identifica solo i browser e le piattaforme, non le dimensioni dello schermo e altre metriche, il che lo rende bello un po 'piccolo.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.