Browser detection using the user agent

This translation is incomplete. Please help translate this article from English

Farklı tarayıcılarda farklı Web sayfalarını veya hizmet Porsiyon genellikle kötü bir fikirdir. Web bakılmaksızın kullanmakta oldukları tarayıcı veya cihaz arasında, herkesin erişebileceği olması gerekiyordu. giderek özelliklerinden ziyade Belirli tarayıcıları hedefleyerek müsaitlik durumuna göre kendini geliştirmek için web sitenizi geliştirmek için yolu vardır.

But browsers and standards are not perfect, and there are still some edge cases where detecting the browser is needed. Using the user agent to detect the browser looks simple, but doing it well is, in fact, a very hard problem. This document will guide you in doing this as correctly as possible.

It's worth re-iterating: it's very rarely a good idea to use user agent sniffing. You can almost always find a better, more broadly compatible way to solve your problem!

Considerations before using browser detection

When considering using the user agent string to detect which browser is being used, your first step is to try to avoid it if possible. Start by trying to identify why you want to do it.

Are you trying to work around a specific bug in some version of a browser?
Look, or ask, in specialized forums: you're unlikely to be the first to hit this problem. Also, experts, or simply people with another point of view, can give you ideas for working around the bug. If the problem seems uncommon, it's worth checking if this bug has been reported to the browser vendor via their bug tracking system (Mozilla; WebKit; Blink; Opera). Browser makers do pay attention to bug reports, and the analysis may hint about other workarounds for the bug.
Are you trying to check for the existence of a specific feature?
Your site needs to use a specific Web feature that some browsers don't yet support, and you want to send those users to an older Web site with fewer features but that you know will work. This is the worst reason to use user agent detection because odds are eventually all the other browsers will catch up. In addition, it is not practical to test every one of the less popular browsers and test for them. You should never do user agent sniffing. There is always the alternative of doing feature detection instead.
Do you want to provide different HTML depending on which browser is being used?
This is usually a bad practice, but there are some cases in which this is necessary. In these cases, you should first analyze your situation to be sure it's really necessary. Can you prevent it by adding some non-semantic <div> or <span> elements? The difficulty of successfully using user agent detection is worth a few disruptions to the purity of your HTML. Also, rethink your design: can you use progressive enhancement or fluid layouts to help remove the need to do this?

Avoiding user agent detection

If you want to avoid using user agent detection, you have options!

Feature detection
Feature detection is where you don't try to figure out which browser is rendering your page, but instead, you check to see if the specific feature you need is available. If it's not, you use a fallback. In those rare cases where behavior differs between browsers, instead of checking the user agent string, you should instead implement a test to detect how the browser implements the API and determine how to use it from that. An example of feature detection is as follows. In 2017, Chrome unflagged experimental lookbehind support in regular expressions, but no other browser supported it. So, you might have thought to do this:
// this code snippet splits a string in a special notation

if (navigator.userAgent.indexOf("Chrome") !== -1){
    // YES! The user is suspected to support look-behind regexps
    // DO NOT USE /(?<=[A-Z])/. It will cause a syntax error in
    //  browsers that do not support look-behind expressions
    //  because all browsers parse the entire script, including
    //  sections of the code that are never executed.
    var camelCaseExpression = new RegExp("(?<=[A-Z])"); 
    var splitUpString = function(str) {
        return (""+str).split(camelCaseExpression);
    };
} else {
    /*This fallback code is much less performant, but works*/
    var splitUpString = function(str){
        return str.replace(/[A-Z]/g,"z$1").split(/z(?=[A-Z])/g);
    };
}
console.log(splitUpString("fooBare")); // ["fooB", "are"]
console.log(splitUpString("jQWhy")); // ["jQ", "W", "hy"]

The above code would have made several incorrect assumptions:

  • Bu "Chrome" alt dize içeren tüm kullanıcı aracısı dizeleri Chrome'u olduğunu varsaydık. UA dizeleri herkesin bildiği yanıltıcı.
  • Bu tarayıcı Chrome ise olan ileriye dönük özelliği her zaman kullanılabilir olacağını varsaydık. ajan onu kaldırıldı Chrome daha yeni bir sürümü olabilir (özellik anda deneysel çünkü) desteği eklendi, ya edilmiştir önce, Chrome'un eski sürüm olabilir.
  • En önemlisi, özelliği destekleyen başka tarayıcıları üstlendi. Destek herhangi bir zamanda diğer tarayıcılarda eklenmiş, ancak bu kod aşağı yolunu seçerek devam edecekti.

Bu gibi sorunlar yerine özelliğin kendisi desteği için test önlenebilir:

var isLookBehindSupported = false;

Deneyin {
    Yeni RegExp ( "(<=)?");
    = Gerçek isLookBehindSupported;
} Catch (err) {
    // ajan geriye ilerleme desteklemiyorsa, teşebbüs
    // bu sözdizimi kullanılarak bir RegExp nesne oluşturma atar ve
    // isLookBehindSupported yanlış kalır.
}

var splitUpString isLookBehindSupported =? fonksiyonu (p) {
    geri ( "" + str) .split (yeni RegExp ( "(<= [AZ])"));
} Fonksiyonu (str) {
    . Dönüş str.replace (/ [AZ] / g "Z $ 1") bölme (/ z (= [AZ]) / gr?);
};

Yukarıdaki kod görüldüğü gibi, orada her zaman kullanıcı aracısı koklama olmadan Test tarayıcı desteği için bir yol. Orada asla bunun için kullanıcı aracı dizesini kontrol etmek için herhangi bir neden.

Son olarak, yukarıdaki kod parçalarını her zaman dikkate alınmasını zorunluluk kodlama çapraz tarayıcı ile kritik bir konu hakkında getirmek. İstemeden desteklenmeyen tarayıcılarda için test ediyoruz API kullanmayın. Bu apaçık ve basit gelebilir, ama bazen öyle değil. Örneğin, yukarıda belirtilen kod parçacıkları olarak, kısa regexp gösterimde olan ileriye dönük kullanılarak (örneğin, / reg / IgM) desteklenmeyen tarayıcılarda bir ayrıştırıcı hataya neden olur. Böylece, yukarıdaki örnekte istersek yeni RegExp ( "? (<= Look_behind_stuff)"); yerine / (? <= look_behind_stuff) / , hatta kod olan ileriye dönük desteklenen bölümünde.

İlerleyen geliştirme
Bu tasarım tekniği daha basit bir katmandan başlayarak ve her fazla özellik kullanılarak, ardışık katmanlar halinde sitenin yeteneklerini geliştirmek, tabandan tavana yaklaşımla, 'katmanlar' daki Web sitesini geliştirilmesini kapsar.
işlev yitimi
Bu size istediğiniz özellikleri tüm kullanarak mümkün olan en iyi site oluşturmak olduğu bir yukarıdan aşağıya bir yaklaşım, o zaman eski tarayıcılarda çalışması için ince ayar. Bu Kademeli iyileştirmelerle daha yapmak zor ve daha az etkili olabilir, ancak bazı durumlarda kullanışlı olabilir.
Mobil cihaz algılama
Muhtemelen kullanıcı aracısı koklama en yaygın kullanımı ve yanlış kullanımı cihaz bir mobil cihaz ise saptamaktır. Ancak insanlar çok sık onlar gerçekten sonra ne bakmaktadır. İnsanlar kullanıcıların cihaz dokunmatik dostu ve küçük bir ekranı varsa onlar web sitelerini buna göre optimize edebilmesi için algılamak için koklama kullanıcı ajanı kullanın. Kullanıcı aracısı koklama bazen bu algılayabilir iken, tüm cihazlar aynı değildir: Bazı mobil cihazlar büyük ekran boyutlarına sahip, bazı masaüstü küçük dokunmatik ekran, bazı insanlar tamamen tamamen farklı ballgame olan akıllı TV'nin kullanmak ve bazı insanların değişim dinamik can yan kendi tabletini çevirerek genişlik ve ekranın yüksekliği! Yani, kullanıcı aracısı koklama kesinlikle gitmek yol değildir. Neyse ki, çok daha iyi alternatifler vardır. Kullanım Navigator.maxTouchPointsKullanıcının cihazı bir dokunmatik ekrana sahipse algılamak için. Daha sonra, kullanıcı aracısı ekranını sadece kontrol varsayılan geri if (! (Gezginindeki "maxTouchPoints öğesi")) {burada / * Kod * /} . Cihaz bir dokunmatik ekran olsun bu bilgileri kullanarak, sadece dokunmatik cihazlar için web sitesinin tüm düzenini değişmez: sadece kendiniz için daha çok çaba ve bakım yaratacaktır. Aksine, (sadece yazı tipi boyutunu artırarak bu kullanarak CSS yapabilirsiniz) böyle büyük, daha kolay tıklanabilir düğmeler gibi dokunmatik kolaylıklar ekleyin. İşte mobil cihazlarda 1em için #exampleButton dolgusu artırır kod bir örnektir.
var hasTouchScreen = false;
if (gezginindeki "maxTouchPoints öğesi") { 
    hasTouchScreen = navigator.maxTouchPoints> 0;
} Else if (gezginindeki "msMaxTouchPoints") {
    hasTouchScreen = navigator.msMaxTouchPoints> 0; 
} Başka {
    var Q'yu ifade etmekte = window.matchMedia && matchMedia ( "(işareti: iri)");
    Eğer (MQ && mQ.media === "(işareti: iri)") {
        hasTouchScreen = !! mQ.matches;
    } Başka, eğer (pencerede 'oryantasyon') {
        hasTouchScreen doğru =; // kullanımdan kaldırıldı, ama iyi geri dönüş
    } Başka {
        // Sadece son çare olarak, koklama kullanıcı ajanı geri düşmek
        var UA = navigator.userAgent;
        hasTouchScreen = (
            /\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(UA) ||
            / \ B (Android | Windows Phone | iPad | iPod) \ b / i.test (UA)
        );
    }
}
Eğer (hasTouchScreen)
    document.getElementById ( "exampleButton") style.padding = "1em.";
Ekran boyutu gelince, sadece kullanım window.innerWidth ve window.addEventListener ( "yeniden boyutlandırma", function () {/ * yenileme ekran boyutu bağımlı şeyler * /}). Ne ekran boyutu için yapmak istediğim küçük ekranlar hakkında bilgi kapalı çizgi değil. Sadece annoy insanlar masaüstü sürümünü kullanımına zorlamak olacaktır çünkü. Aksine, daha büyük ekran boyutlarında daha kısa sayfayla fazla sütun yerken küçük ekranlarında uzun sayfasında bilginin daha az sayıda sütun olması çalışın. Bu etki, CSS kullanılarak elde edilebilir flexboxes bazen ile yüzen kısmi yedek olarak.
Ayrıca birlikte anlamlı alt ve grup sayfanın içeriğine aşağı az alakalı / önemli bilgileri taşımak için deneyin. o-konu kapalı olmasına rağmen, belki de aşağıdaki ayrıntılı örnek size koklama kullanıcı aracısı vazgeçmek için ikna anlayış ve fikir verebilir. Bize bilgi kutuları oluşan bir sayfa düşünelim; Her kutu farklı bir kedi ırkı veya köpek cins ilgili. Her kutu bir görüntü, bir bakış ve tarihsel bir funfact vardır. resimler bile büyük ekranlarda azami makul bir boyuta tutulur. anlamlı içerik gruplama amaçları için, her kedi kutuları kedi ve köpek kutuları birlikte karışık olmayan şekilde tüm köpek kutuları ayrılır. Büyük bir ekranda sola doğru ve resimlerin sağına belli boşluğu azaltmak birden çok sütun olması yerden kazandırır. kutular iki eşit makul yöntemiyle birden çok sütun ayrılabilir. Bu noktadan itibaren hepimiz köpek kutuları tüm kedi kutuları kaynak kodunun dipte oldukları, kaynak kodunun üst kısmında olduğunu ve bütün bu kutuları aynı üst elemanı olduğunu üstlenecektir. Bir köpek, tek bir örnek tabii ki, bir kedi kutusunun üzerinde hemen Orada kutu. Birinci yöntem, yatay kullanırFlexboxes grubuna sayfa son kullanıcıya görüntülendiğinde, tüm köpekler kutuları sayfanın üst ve tüm kedi kutuları altındadır bu içerik, sayfada düşüktür. İkinci yöntem kullanır Sütun düzeni ve dargın sola tüm köpekler ve sağındaki tüm kediler. Sadece bu özel senaryoda, eski tarayıcılarda çok geniş kutuları tek bir sütunda sonuçlanan flexboxes / multicolumns hiçbir yedeği sağlamak üzere uygundur. Ayrıca aşağıdakileri dikkate alın. Daha fazla insan kediler görmek için web sayfasını ziyaret ederseniz, o zaman çok daha fazla insan daha hızlı daha küçük ekranlar içerik çökmeler üzerinde aradığınızı bulabilmeniz köpeklerden daha kaynak kodunda yüksek bütün kedileri koymak iyi bir fikir olabilir bir sütun aşağı.
Sonra, her zaman kod dinamik hale getirmek. Kullanıcı sayfasının genişliğini ve yüksekliğini değiştirerek, yan mobil cihaz çevirebilirsiniz. Ya da, bunu saygısız ekranı genişletir gelecekte bazı garip flip-telefon benzeri cihaz şey olabilir. Flip-telefon-benzeri cihaz şeyle nasıl başa üzerinde bir baş ağrısı olan geliştirici olma. Eğer dev araçları yan paneli açmak ve web sayfası görünüyor, sıvı pürüzsüz iken ekranı yeniden boyutlandırmak kadar web sayfanıza memnun ve dinamik yeniden boyutlandırılabilir asla. Bunu yapmanın en kolay yolu hamle içeriği etrafında sayfa yüklendiğinde çağrılan bir tek işlevi ve her birinde ekran boyutuna göre tüm kodu ayırmaktır boyutlandırmakOlay bundan sonra. Sayfanın yeni düzen belirler önce bu düzen işlevi tarafından hesaplanan bir sürü varsa, o zaman sık sık çağrılmaz şekilde olay dinleyicisi zıplamaölçer düşünün. Ayrıca medya sorguları arasında büyük bir fark olduğunu unutmayın (max-width: 25em), not all and (min-width: 25em)ve (max-width: 24.99em): (max-width: 25em)hariç tutar (max-width: 25em)ise not all and (min-width: 25em)kapsamaktadır (max-width: 25em). (max-width: 24.99em) basitçe kötü bir adamın versiyonu olan   not all and (min-width: 25em): kullanmayan (max-width: 24.99em) düzeni nedeniyle kudretiniGelecekte çok yüksek çözünürlüklü cihazlarda çok yüksek yazı tipi boyutlarını üzerinde bölünürler. Daima doğru medya sorgusu seçme ve hakkını seçme hakkında kasıtlı çok olması> =, <=,> veya <o ekran boyutuna doğru wonking görünümlü web sonuçlanan bu karışık yukarı almak çok kolay olduğu için herhangi bir JavaScript tekabül içinde nerede düzeni değiştirir. Böylece, iyice düzen değişiklikleri düzen değişiklikleri düzgün meydana sağlamak için ortaya tam genişlikleri / yüksekliklerde web sitesini test edin.

kullanıcı ajanının iyi koklama yapma

koklama kullanıcı aracısı daha iyi alternatifler Yukarıdakilerin hepsi inceledikten sonra, kullanıcı aracısı koklama uygun ve haklı bazı potansiyel durumla karşılaşabiliyoruz.

Bu gibi bir durumda cihaz, bir dokunmatik ekrana sahip olmadığını tespit ederken, bir yedek olarak koklama kullanıcı ajanı kullanmaktadır. Bkz Mobil Cihaz Algılama Daha fazla bilgi için bölüm.

Böylesi bir başka örnek otomatik güncelleme yok tarayıcılarda hata tespit içindir. İnternet (Windows'da) Explorer ve (iOS'da) Webkit iki mükemmel örnekleridir. Sürümüne 9 öncesinde, Internet Explorer, vb render böcek, CSS böcek, API hatalara, ile inanılmaz sorunlar vardı. Ancak, Internet Explorer, böyle bir özel biraz yaban arısıtarayıcının-özgü dayalı tarayıcı tespit etmek çok kolay olduğunu sürümüne 9 öncesinde istisna mevcut bulunmaktadır. Webkit tüm IOS üzerinde tarayıcıların Elma güçleri içten WebKit kullanmaya çünkü böylece kullanıcı eski cihazlarda daha iyi daha güncel bir tarayıcı almak için bir yol vardır biraz daha kötüdür. Çoğu hatalar tespit edilebilir, ancak bazı hatalar diğerlerinden daha algılamak için daha fazla çaba alır. Bu gibi durumlarda, performans üzerinde tasarruf koklama kullanıcı aracısı kullanılması faydalı olabilir. Örneğin, Webkit'teki 6 cihaz yönlendirme değişiklikleri, tarayıcı ateş olabilir, burada bir hata var MediaQueryList gerektiği dinleyici. Bu hatayı çözmek için, aşağıdaki kodu gözlemliyoruz.

var UA = navigator.userAgent, isWebkit = / \ b (iPad | iPhone | iPod) \ b / .test (UA) &&
               ! /WebKit/.test(UA) && /Edge/.test (UA) && window.MSStream!;

var mediaQueryUpdated = doğru mu, MMS = [];
whenMediaChanges fonksiyonu () {} mediaQueryUpdated doğru =

var listenToMediaQuery = isWebkit ? function(mQ, f) {
    (/Height|width/.test (mQ.media)) mqL.push ([mW, f]) ise;
    mQ.addListener (f) mQ.addListener (whenMediaChanges);
} Fonksiyonu () {};
var destroyMediaQuery = isWebkit ? function(mQ) {
    için (var i 0, uzunluk = mqL.length = | 0; i <len; i = i + 1 | 0)
        Eğer (MMS [i] [0] === mQ) içindeki mqL.splice (i, 1);
    mQ.removeListener (whenMediaChanges);
} ListenToMediaQuery;
        
var orientationChanged = false;
addEventListener ( "orientationChange", fonksiyon () {
    = Gerçek orientationChanged;
} PASSIVE_LISTENER_OPTION);

addEventListener ( "boyutlandırma", setTimeout.bind (0, fonksiyon () {
    if (orientationChanged &&! mediaQueryUpdated)
        için (var i 0, uzunluk = mqL.length = | 0; i <len; i = i + 1 | 0)
            MMS [i] [1] (MMS [i] [0]);
    = OrientationChanged = false mediaQueryUpdated;
},0));

kullanıcı aracısı hangi kısmını Aradığınız bilgileri içerir?

kullanıcı aracısı dizesinin farklı kısmının hiçbir tekdüzelik olmadığı gibi, bu zor bir parçasıdır.

Tarayıcı Adı

insanlar "tarayıcı algılama" istiyor dediğimizde, genellikle aslında "render motoru algılama" istiyorum. aslında SeaMonkey aksine veya Krom aksine Krom gibi Firefox algılamak istiyor musunuz? Yoksa aslında basitçe tarayıcı Gecko veya WebKit motorunu kullanarak olup olmadığını görmek istiyorsun? bu gerekenler ise, Sayfanın altındaki görüyoruz.

Çoğu tarayıcı formatında adı ve sürümü set BrowserName / VersionNumber Internet Explorer'ın önemli hariç. Ama adı bu biçimde bir kullanıcı aracısı dizesinde tek bilgi olmadığı için, tarayıcının adını bulamaz, sadece isim Aradığınız olmadığını kontrol edebilirsiniz. Ama dikkat bazı tarayıcılar yalan olduğunu: Krom örneğin raporları Chrome ve Safari gibi hem. Krom çok ya Seamonkey bazen Firefox gibi kendisini raporları gibi Yani Safari algılamak için Safari dize ve Chrome dize olmadığını kontrol etmek zorunda, Krom sıklıkla kendini bildirir.

Ayrıca, ödeme dikkat BrowserName basit normal ifade kullanmamaya, kullanıcı ajanlar da Kelime / Değer sözdizimi dışında dizeleri içerir. Safari & Krom örneğin, 'Gecko gibi' dizesini içerir.

İçermek zorundadır içermemelidir
Firefox Firefox / xyz Seamonkey / xyz
Seamonkey Seamonkey / xyz
Krom Krom / xyz Krom / xyz
Krom Krom / xyz
Safari Safari / xyz Krom / xyz veya Chromium / xyz Safari Safari / xyz jeton, bir kullanıcı dostu bir Sürüm / xyz jeton teknik bir iki sürüm numarasını verir
Opera

P.S.O / xyz [1]

Opera / xyz [2]

[1] Opera 15 + (Blink tabanlı motor)

[2] Opera 12- (Presto tabanlı motor)

Internet Explorer ; MSIE xyz; Internet Explorer, adını koymuyor BrowserName / VersionNumber formatında

Tabii ki, (Krom geçmişte Safari dize kaçırıldı gibi) başka bir tarayıcı bunlardan bazıları kaçırmak olmaz kesinlikle hiçbir garantisi yoktur. kullanıcı aracı dizesini kullanarak tarayıcı algılama güvenilmez ve sürüm numarasının çek ile sadece yapılmalıdır yüzden (son sürümlerini kaçırma olasılığı daha düşüktür).

Tarayıcı sürümü

Tarayıcı sürümü genellikle, ama her zaman değil, değeri kısmında koymak BrowserName / versionNumber Kullanıcı Ajan dize içinde simge. Bu ders bir sürümü / eklemiştir sürümü 10 sonra ve Opera için (MSIE belirteci sonra sürüm numarası hakkı koyar) Internet Explorer için durum bu değildir VersionNumber simge.

Burada yine, diğerleri geçerli bir sayı içerecek garantisi yoktur gibi aradığınız tarayıcı için doğru belirteci aldığınızdan emin olun.

Rendering motoru

Daha önce görüldüğü gibi, çoğu durumda, render motoru için arayan gitmek için daha iyi bir yoldur. değil az bilinen tarayıcılar dışlamak için bu yardımcı olacaktır. ortak oluşturma motoru paylaşan Tarayıcılar aynı şekilde bir sayfasını görüntüler: genellikle bir başka çalışacak ne çalışacağını adil bir varsayımdır.

Trident, Gecko, Presto, Blink ve WebKit: beş ana render motorları vardır. oluşturma motorları isimleri koklama yaygın olduğu gibi, kullanıcı ajanlar bir çok tetikleme saptama diğer oluşturma adları ilave edildi. Render motorunu tespit ederken tetik yanlış pozitif değil dikkat etmek önemlidir.

İçermek zorundadır
geko Gecko / xyz
Webkit AppleWebKit / xyz Dikkatini WebKit tarayıcı algılama dikkatli değilse Gecko açısından yanlış pozitif tetikleyebilir bir 'Gecko gibi' dize ekleyin.
çabuk Opera / xyz Not: Presto artık Opera tarayıcısında kullanılan kurar> = sürüm 15 ( 'Blink' bakınız)
üç dişli mızrak Trident / xyz Internet Explorer, bu belirteci koymak comment Kullanıcı Ajan dize parçası
Goz kirpmak Krom / xyz

motor versiyonunu Rendering

Çoğu render motorları sürüm numarasını koymak VersionNumber / RenderingEngine Gecko önemli hariç, simge. Gecko sonra Kullanıcı Ajanının açıklama kısmında Gecko sürüm numarasını koyar rv:dize. Mobil versiyonu için Gecko 14 ve masaüstü sürümü için Gecko 17 bakıldığında, aynı zamanda bu değeri koyar Gecko/versionbelirteci (önceki versiyonu sonra inşa tarihi, GeckoTrail denilen sabit bir tarih koymak).

işletim sistemi

(Firefox OS gibi platformlar web odaklı olmasa da) İşletim Sistemi en User Agent dizeleri verilmektedir, ancak biçim çok değişir. Bu Kullanıcı Ajan ait açıklama kısmında iki yarı konup sabit dizesidir. Bu dizeler her tarayıcı için özeldir. Onlar da sık sık güvenerek donanım (32 veya 64 bit veya Intel Mac için / PPC) üzerindeki versiyonunu ve bilgi OS gösteriyor, ancak.

her durumda, bu dizeleri gelecekte değişebilir gibi, biri zaten serbest tarayıcıların algılama sadece birlikte kullanmalıdır. Yeni tarayıcı sürümleri çıkan yapıyorsa, teknolojik araştırma komut adapte yerde olmalıdır.

Mobil, Tablet veya Masaüstü

kullanıcı aracısı sniffing'i gerçekleştirmek için en yaygın nedeni cihazın hangi tür tarayıcı çalışır belirlemektir. Amaç farklı cihaz türlerine farklı HTML hizmet etmektir.

  • Bir tarayıcı veya oluşturma motorunun sadece cihazın tek tip üzerinde çalışan edilen varsayalım. Özellikle farklı tarayıcılar veya render motorları için farklı varsayılan yapmazlar.
  • Bir tarayıcı mobil, tablet veya masaüstünde ise tanımlamak için belirteç OS kullanmayın. İS (yanı telefonlar gibi tabletlerde ör, Android ishal) birden fazla türüne çalıştırabilir.

Aşağıdaki tabloda ana tarayıcı üreticileri tarayıcıları bir mobil cihazda çalıştığını gösterebilir şekilde özetler:

Genel tarayıcılar User Agent dizeleri
Tarayıcı Kural Misal
Mozilla (Gecko, Firefox) Mobil veya Tablet belirteci yorumunda. Mozilla / 5.0 (Android; Mobil; rv: 13.0) Gecko / 13.0 Firefox / 13.0
WebKit tabanlı (Android, Safari) Mobil Safari belirteci yorumun dışında. Mozilla / 5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Yapı / IML74K) AppleWebKit / 534,30 (KHTML, Gecko benzeri) Sürüm / 4.0 Mobil Safari / 534,30
Blink-tabanlı (Krom, Google Chrome, Opera 15+) Mobil Safari jetonun yorumun dışında Mozilla / 5.0 (Linux; Android 4.4.2); Nexus 5 Yapı / KOT49H) AppleWebKit / 537,36 Gecko gibi (KHTML) Krom / 33.0.1750.117 Mobil Safari / 537,36 P.S.O / 20.0.1396.72047
Soon-tabanlı (12- Operası)

Opera Mobi / xyz belirteç içinde comment (Opera 12-)

Opera / 9.80 (Android 2.3.3; Linux; Opera Mobi / ADR-1111101157; U; es-ES) Presto / 2.9.201 Sürüm / 11.50

Internet Explorer IEMobile / xyz jeton yorum yapın. Mozilla / 5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident / 5.0; IEMobile / 9.0)

Özetle, bir mobil cihaz tespit etmek Kullanıcı Ajan içinde dize “Mobi” her yerde arıyor öneriyoruz.

cihaz “Mobi” ile işaretlenmiş değil ki yeterince büyük ise, (daha masaüstü makineleri dokunmatik ekranlar birlikte göründüğünü olarak en iyi uygulama olarak, zaten dokunmatik girdi desteklemelidir) masaüstü sitesini hizmet etmelidir.