Deteksi otomatis peramban seluler (melalui agen-pengguna?) [Ditutup]


291

Bagaimana saya bisa mendeteksi jika pengguna melihat situs web saya dari peramban web seluler sehingga saya dapat mendeteksi dan menampilkan versi situs web saya secara otomatis?


12
Apakah iPad masuk hitungan? :)
Seva Alekseyev

33
Komentar Seva memunculkan pertanyaan yang bagus. Apa arti "ponsel" hari ini? Apakah ini merujuk ke "telepon fitur" yang memiliki browser tetapi tidak banyak? Apakah ini merujuk pada ponsel pintar berfitur lengkap di mana metode input dan resolusi tampilan merupakan faktor pembatas? Bagaimana dengan tablet yang mudah berinteraksi dan memiliki tampilan resolusi tinggi? Bagaimana dengan perangkat seperti pusat media - mereka tidak pernah meninggalkan ruang tamu tetapi mereka memiliki keterbatasan yang sama. Seorang teman di tempat kerja mengirimi saya ini. Saya menemukannya sangat mendalam. slideshare.net/bryanrieger/rethinking-the-mobile-web-by-yiibu
spaaarky21

1
@Ricki tetapi di iPad Anda masih tidak dapat mis menampilkan konten flash atau menggunakan editor teks kaya berbasis javascript seperti tinymce.
TJ Ellis

1
iPad tidak dapat melihat flash, tapi itu topik yang berbeda, seperti mendeteksi jika browser mendukung flash.
Shaun

2
Hanya posting dari masa depan, tetapi siapa pun yang tertarik untuk menyajikan versi seluler situs mereka mungkin tertarik pada beberapa artikel tentang "desain responsif".
Vael Victus

Jawaban:


91

Ya, membaca tajuk Agen-Pengguna akan membantu.

Ada beberapa daftar keluar ada agen pengguna mobile dikenal sehingga Anda tidak perlu mulai dari awal. Apa yang saya lakukan ketika saya harus membangun database agen pengguna yang dikenal dan menyimpan yang tidak diketahui saat mereka terdeteksi untuk revisi dan kemudian secara manual mencari tahu apa mereka. Hal terakhir ini mungkin berlebihan dalam beberapa kasus.

Jika Anda ingin melakukannya di tingkat Apache, Anda dapat membuat skrip yang secara berkala menghasilkan seperangkat aturan penulisan ulang memeriksa agen pengguna (atau hanya sekali dan melupakan agen pengguna baru, atau sebulan sekali, apa pun yang sesuai dengan kasus Anda), seperti

RewriteEngine On

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

yang akan pindah, misalnya, permintaan ke http: //domain/index.html ke http: //domain/mobile/index.html

Jika Anda tidak suka pendekatan memiliki skrip membuat ulang file htaccess secara berkala, Anda dapat menulis modul yang memeriksa Agen Pengguna (saya tidak menemukan yang sudah dibuat, tetapi menemukan ini contoh yang sangat sesuai ) dan mendapatkan agen pengguna dari beberapa situs untuk memperbaruinya. Maka Anda dapat memperumit pendekatan sebanyak yang Anda inginkan, tetapi saya pikir dalam kasus Anda pendekatan sebelumnya akan baik-baik saja.


3
Apakah ini dapat dilakukan pada lapisan server web (Apache) melalui beberapa jenis perintah .htaccess - alih-alih menggunakan bahasa skrip seperti PHP?

ide untuk mengatur root dokumen oleh agen-pengguna
Carson

126

Ada skrip open source di Detect Mobile Browser yang melakukan ini di Apache, ASP, ColdFusion, JavaScript dan PHP.


5
@guitar Jika itu masalahnya maka Anda harus mengirim UA Anda.
Adam Tuttle

9
Bleh ... Saya sangat tidak suka "bau kode" dari solusi ini. Pencocokan Regex menggunakan sekelompok awalan 4-karakter tanpa petunjuk tentang dari mana asalnya ... tidak, terima kasih.
Kita Semua Monica

2
Itu adalah satu pernyataan regex. Saya setuju, kode bau ini tidak baik untuk yang satu ini.
Jack Cox

5
Saya juga tidak suka solusi "Sumber Terbuka" tanpa Lisensi dan tidak ada indikasi pembaruan.
Eduardo

12
Tidak ada jalan lain. Pada tingkat tertentu segala jenis solusi akan melakukan pemeriksaan regex pada agen pengguna.
Kyle

33

Hanya pemikiran tetapi bagaimana jika Anda mengatasi masalah ini dari arah yang berlawanan? Daripada menentukan browser mana yang mobile, mengapa tidak menentukan browser mana yang tidak? Kemudian kode situs Anda ke default ke versi seluler dan arahkan ke versi standar. Ada dua kemungkinan dasar saat melihat peramban seluler. Entah itu memiliki dukungan javascript atau tidak. Jadi, jika peramban tidak memiliki dukungan javascript, maka peramban itu akan default ke versi seluler. Jika memang memiliki dukungan JavaScript, periksa ukuran layar. Apa pun di bawah ukuran tertentu kemungkinan juga akan menjadi peramban seluler. Apa pun yang lebih besar akan diarahkan ke tata letak standar Anda. Maka yang perlu Anda lakukan adalah menentukan apakah pengguna dengan JavaScript dinonaktifkan adalah seluler atau tidak.
Menurut W3C jumlah pengguna dengan JavaScript dinonaktifkan sekitar 5% dan dari pengguna tersebut sebagian besar telah mematikannya yang menyiratkan bahwa mereka benar-benar tahu apa yang mereka lakukan dengan browser. Apakah mereka bagian besar dari audiens Anda? Jika tidak maka jangan khawatir tentang mereka. Jika demikian, apa skenario terburuknya? Anda memiliki para pengguna yang meramban versi seluler situs Anda, dan itu bagus.


3
Ini adalah ide yang sangat bagus, saya pikir ini solusi yang elegan.
Maxim Veksler

3
+1 ini kedengarannya seperti ide yang cukup manis, tetapi apakah ini akan memengaruhi crawler mesin pencari?
Mikey G

Ini adalah ide yang salah arah. Ekstensi peramban yang menonaktifkan javascript sangat populer di peramban desktop, jadi dengan anggapan bahwa tidak ada javascript berarti seluler sama sekali salah. Resolusi Window / viewport / layar tidak ada sangkut pautnya dengan ukuran peramban, dan dengan anggapan bahwa resolusi rendah menunjukkan ukuran genggam akan membuat aplikasi web Anda jelek dan membuat frustrasi banyak pengguna. (Misalnya: browser desktop di jendela non-layar penuh, tablet besar.)
әɹsәɹoɈ

31

Inilah cara saya melakukannya dalam JavaScript:

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

Lihat contoh di www.tablemaker.net/test/mobile.html di mana ukuran fontnya tiga kali lipat pada ponsel.


jika Anda ingin menggabungkan akun Anda lihat di sini: meta.stackexchange.com/questions/18232/…
Brandon

Ini tidak akan berfungsi ketika datang ke tablet (mis. IPad)
Si8

Gunakan "mobi" karena Opera Mobile.
mgutt

1
Dan Anda perlu "Opera Mini" karena ini adalah salah satu browser langka yang tidak menggunakan "mobi" di Agen Pengguna.
mgutt


17

Sudahkah Anda mempertimbangkan untuk menggunakan kueri media css3? Dalam kebanyakan kasus, Anda dapat menerapkan beberapa gaya css khusus untuk perangkat yang ditargetkan tanpa harus membuat versi seluler situs yang terpisah.

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

Anda dapat mengatur lebar untuk apa pun yang Anda inginkan, tetapi 1025 akan menangkap tampilan lanskap iPad.

Anda juga ingin menambahkan tag meta berikut ke kepala Anda:

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

Lihat artikel ini di HTML5 Rocks untuk beberapa contoh yang bagus


1
Saya pikir ini sebenarnya cara terbaik untuk pergi. Skrip yang melihat string Agen Pengguna ditakdirkan untuk keluar dari tanggal. Melihat real estat layar yang tersedia memungkinkan desain responsif tanpa khawatir perangkat baru tidak terdeteksi.
Adam Tuttle

1
Ini hanya berfungsi untuk deteksi sisi klien. Tetapi jika Anda ingin sisi server Anda berperilaku berbeda untuk klien seluler, Anda harus menggunakan teknik lain.
Igor Brejc

Ini gagal total untuk browser desktop yang tidak menjalankan layar penuh. Jika Anda tetap memilih untuk melakukannya, jangan buang ruang layar dengan font dan margin yang sangat besar, atau sembunyikan fungsionalitas / informasi penting di balik menu drop-down. Ini akan membuat situs / aplikasi Anda jelek dan membuat frustrasi sebagian pengguna Anda.
ʇsәɹoɈ

13

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

Saya menemukan ini sangat membantu.
bozdoz

Anda pasti harus memeriksa Conditionizr yang akan menangani semua ini untuk Anda! Anda dapat menambahkan tes khusus, mengambilnya melalui tes objek dan memiliki panggilan balik. Mereka juga mendapatkan serangkaian tes premade yang tersedia: conditionizr.com/detects
Halcyon991

Elenasys, terima kasih atas jawaban yang bermanfaat. Meskipun, saya tidak dapat menemukan UA yang cocok dengan "windows \ sce" di db saya.
nefski

1
Ini tidak berfungsi untuk ponsel windows.
jwerre

terima kasih tetapi telepon Windows tidak ditentukan ...
Jorgesys

6

File Browser Perangkat Seluler adalah cara yang bagus untuk mendeteksi broswers seluler (dan lainnya) untuk proyek ASP.NET: http://mdbf.codeplex.com/


Apakah Browser Perangkat Seluler masih berfungsi? Saya perhatikan bahwa ada notasi bahwa ini sedang offline? ...
creativeedg10

5

Anda dapat mendeteksi klien seluler hanya melalui navigator.userAgent, dan memuat skrip alternatif berdasarkan jenis klien yang terdeteksi sebagai:

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

    });

Untuk solusi yang lebih mudah dikelola, Anda dapat menggunakan Conditionizr yang akan menangani semua ini untuk Anda! Anda dapat menambahkan tes khusus, mengambilnya melalui tes objek dan memiliki panggilan balik. Mereka juga mendapatkan serangkaian tes premade yang tersedia: conditionizr.com/detects
Halcyon991

4

Anda dapat memeriksa string User-Agent. Dalam JavaScript, itu sangat mudah, itu hanya properti dari objek navigator.

var useragent = navigator.userAgent;

Anda dapat memeriksa apakah perangkat apakah iPhone atau Blackberry di JS dengan sesuatu seperti

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

jika isIphone benar Anda mengakses situs dari iPhone, jika isBlackBerry Anda mengakses situs dari Blackberry.

Anda dapat menggunakan plugin "UserAgent Switcher" untuk firefox untuk mengujinya.

Jika Anda juga tertarik, mungkin ada baiknya memeriksa skrip saya "redirection_mobile.js" yang dihosting di github di sini https://github.com/sebarmeli/JS-Redirection-Mobile-Site dan Anda dapat membaca detail lebih lanjut di salah satu artikel saya di sini:

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


1
Menggunakan .match salah di sini, Anda ingin menggunakan .test () yang mengevaluasi ke nilai boolean, itu juga jauh lebih cepat daripada .match () dan tidak mengembalikan array. Untuk solusi yang lebih mudah dikelola untuk pengujian userAgent Anda, Anda dapat menggunakan Conditionizr yang akan menangani semua ini untuk Anda! Anda dapat menambahkan tes khusus, mengambilnya melalui tes objek dan memiliki panggilan balik. Mereka juga memiliki berbagai tes premade yang tersedia: conditionizr.com/detects
Halcyon991

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

Contoh ini berfungsi di asp.net


3

Anda belum mengatakan bahasa apa yang Anda gunakan. Jika itu Perl maka itu sepele:

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
}


0

Ya agen pengguna digunakan untuk mendeteksi browser seluler. Ada banyak skrip gratis yang tersedia untuk memeriksanya. Berikut adalah salah satu kode php yang akan membantu Anda mengarahkan pengguna seluler ke situs web yang berbeda.


1
Apakah ini dapat dilakukan pada lapisan server web (Apache) melalui beberapa jenis perintah .htaccess - alih-alih menggunakan PHP?

0

Saya menempatkan demo ini dengan skrip dan contoh yang disertakan bersama:

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

Contoh ini menggunakan fungsi php untuk deteksi agen pengguna dan menawarkan manfaat tambahan dari mengizinkan pengguna untuk menyatakan preferensi untuk versi situs yang biasanya tidak akan menjadi default berdasarkan browser atau tipe perangkat mereka. Ini dilakukan dengan cookie (dikelola menggunakan php di sisi server sebagai lawan javascript.)

Pastikan untuk memeriksa tautan unduhan di artikel untuk contohnya.

Semoga kamu menikmati!


0

MobileESP memiliki pengait PHP, Java, APS.NET (C #), Ruby dan JavaScript. ia juga memiliki lisensi Apache 2, jadi gratis untuk penggunaan komersial. Kuncinya bagi saya adalah itu hanya mengidentifikasi browser dan platform bukan ukuran layar dan metrik lainnya, yang membuatnya tetap kecil.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.