So erkennen Sie den Bestands-Android-Browser

Navigieren zu http://whatsmyuseragent.com/ zeigt mir meine Lager Android-Browser auf meinem Galaxy Nexus läuft 4.2.1 hat die User-Agent

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24 

Es gibt nichts in diesem User-Agent, der mir erlaubt, einzigartig zu erkennen, dass es ein Lager Android-Browser ist. Die Chrome für Android App hat mindestens android in der UA. Gibt es eine Möglichkeit für mich, die Android-App zu entdecken?

  • Android user agent
  • Benutzerdefinierte Benutzer-Agent-String oder Header ohne Änderung von cordova libs
  • Unterscheiden Sie Android Chrome aus dem Bestands-Browser. Der User Agent des Stock Browsers enthält 'Chrome'
  • Setzen Sie User Agent in Java httpclient und erlauben Umleitungen zu true
  • Warum der User Agent als "Apache-HttpClient / UNAVAILABLE (Java 1.4)" gesendet wird "
  • Im HTTP-User-Agent-Header von Android, was bedeutet das "U"?
  • Benutzer-Agent programmgesteuert abrufen
  • Android - Default User Agent für URLConnection?
  • 13 Solutions collect form web for “So erkennen Sie den Bestands-Android-Browser”

     var navU = navigator.userAgent; // Android Mobile var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; // Apple webkit var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); // Chrome var regExChrome = new RegExp(/Chrome\/([\d.]+)/); var resultChromeRegEx = regExChrome.exec(navU); var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1])); // Native Android Browser var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 537) || (chromeVersion !== null && chromeVersion < 37); 

    "Android Browser" ist der Name eines Browsers. Verwirrung vielleicht, aber mit einer Frage wie diese, sollte es nicht sein. Es ist der Browser, der mit der überwiegenden Mehrheit der Android-Geräte kommt, und er ist offensichtlich nicht über Chrome zu sprechen.

    Nach http://www.useragentstring.com/ Dies ist die vollständige Liste der Android Stock Browser Strings. Ich bin derzeit nicht sicher, ob es einen besseren Weg, um alle von ihnen auf einmal zu wählen, da einige werden weiterhin hinzugefügt werden, und auch, die nicht zufällig Ziel Chrome auf Android. Hoffentlich gibt mir jemand eine bessere Antwort, da ich mich neugierig bin von der besten Art, darüber zu gehen.

     Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9 Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; de-de; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.1-update1; es-mx; SonyEricssonE10a Build/2.0.A.0.504) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 Mozilla/5.0 (Linux; U; Android 1.6; ar-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 

    Sie können den Unterschied zwischen dem Bestands-Browser und dem Chrome-Browser erkennen, indem Sie nach "Android" im Useragent suchen und die AppleWebKit / ### Versionsnummer überprüfen.

    Der Lager Android-Browser ging nie über 534, und Chrome ist 537 oder höher.

     var maybeAndroid = navigator.userAgent.indexOf('Android') >= 0; var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.appVersion)[1], 10); // also matches AppleWebKit var isAOSP = maybeAndroid && webkitVer <= 534 && navigator.vendor.indexOf('Google') == 0; 

    Dies ist 99% zuverlässig und sehr nützlich für eine App auf Android 4.x mit einem WebView.

    == Details (wenn du in die Tiefe gehen willst!) ==

    Edit 7: 'AudioNode' in window ist wohl ein sicherer Schnüffel für AOSP (oder Old Chrome) im Vergleich zu modernen Chrome Versionen. Versuche es hier Window.AudioNode wurde als Teil der WebAudio-Unterstützung in Chrome 29 eingeführt (und unwahrscheinlich, dass sie von den Herstellern rückseitig portiert werden). Unser 4.0.3 Telefon hat Chrome 41 auf ihm, und 'AudioNode' in window gibt true für Chrome und false für AOSP zurück. Sie könnten auch schnüffeln für andere Features eingeführt, nachdem AOSP beendet Entwicklung – sehen Sie diesen Link für andere potenzielle Features zu schnüffeln. Wählen Sie ein Feature vor Chrome 42 eingeführt, da Android 4.0 Benutzer können nicht über diese Version aktualisieren. Wie üblich mit Android, gibt es sicherlich seltsame Randfälle, aber das Schnüffeln ist wahrscheinlich so gut wie Sie bekommen können (vor allem, wenn mit der Überprüfung, dass WebKit Version <537 kombiniert).

    Bearbeiten 8:

    == WebView auf Android ==

    Die Prüfung auf <= 534 ist ein perfekter Test bei der Verwendung eines WebViews innerhalb einer App. Die Kompatibilitätsdefinition für Android 4.3 (die letzte Android-Version, um AOSP für WebView zu verwenden), sagt der WebView User Agent MUSS: " Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 ".

    Die Kompatibilitätsdefinition für Android 4.4 (die erste Android-Version, die Chromium für WebView verwendet), sagt der WebView User Agent MUSS: " Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36 ".

    Weniger als Android 4.3 ist sehr ähnlich der 4.3 Definition (immer AOSP). Größer als 4.4 ist der 4.4-Definition (immer Chromium) sehr ähnlich.

    == AOSP auf Android ==

    Für den Browser auf dem Gerät (nicht WebView) wird der User Agent nicht durch die Kompatibilitätsdefinition verboten. Die tatsächliche Browser-Version verwendet variiert viel, wie auf quirksmode dokumentiert und wie für die Samsung-Browser-Version dokumentiert.

    Bearbeiten 4: Die empfohlene Lösung ist, nach Android ohne Chrome im User Agent zu suchen: https://developer.chrome.com/multidevice/user-agent#webview_user_agent aber es kann auch notwendig sein, die Abwesenheit von / Windows zu gewährleisten Telefon / weil Mobile-IE11-8.1-Update hat auch Android in der UA " Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 ". Bearbeiten 5: https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx zeigt, dass IE12 auf Windows Phone noch Android im User Agent hat.

    Bearbeiten 3: Wie die Kommentatoren gesagt haben, gibt es Geräte da draußen mit AOSP und> = 535, aber das ist der zuverlässigste Test, den ich gefunden habe (ich würde gerne etwas Besseres sehen). Sie können aber versuchen, um sicherzustellen, dass Ihr Code ist immer noch funktional, wenn der Schnüffel fehlschlägt, und akzeptieren, dass Android-Fragmentierung bedeutet, dass es seltsame Geräte, die scheitern. Caveat Emptor Bearbeiten 6: Betrachten Sie einige Daten für eine bestimmte Website etwa 1% von dem, was aussehen, um AOSP Logins haben WebKit 537, also obwohl es ziemlich zuverlässig scheint, ist es definitiv nicht 100% zuverlässig.

    Bearbeiten 2: Wenn Sie ein WebView in einer App verwenden, ist diese Erkennung für Android> = 4.0 && Android <4.4.4 nützlich, da die WebView-Komponente AOSP verwendet, auch wenn Chrome auf dem Gerät installiert ist.

    Bearbeiten 1: Da native Android ist jetzt "veraltet" ist es vernünftig, für sie zu testen (und verwenden Sie die Flagge, um Unterschiede zu umgehen, die nicht mit Feature-Erkennung erkannt werden können).

    Ab sofort gibt es keine echte Methode, dies zu erkennen. Ich bin derzeit auf Android 4.2.2 Stock Galaxy S4 AT & T und der Standard-Browser hat jetzt Chrome in der User-Agent (aber immer noch die TouchWiz Fragen der Position fixiert)

    Bis Samsung kann entweder a) reparieren Touchwiz oder b) entfernen Chrom aus der ua String, haben wir keine echte Methode zur Erkennung der Android-Browser. Ich kann nicht sagen, ob dies für alle 4,2x + Telefone der Fall ist, aber das ist ein großes Problem für die Entwicklung von Teams, die Fertigungs- / Browser-spezifische Abfragen erfordern.

    Ich bin ein aktives Entwicklerteam für mobile Web-Apps und es scheint, dass TouchWiz viele Probleme für verschiedene Aspekte entwickelt, die entwickelt werden.

    Ein weiteres Problem ist, dass es Unternehmen wie Dolphin (großer Browser, schreckliche UA) gibt, die in all diesen Fällen als Standardbrowser wieder auftauchen würden, da sie keine "Delphin" -Screen bietet und AppleWebKit534x verwendet


    Auch in Bezug auf die U in der User-Agent-String hatte es nichts mit dem Browser zu tun. Infakt dies hat mit der Verschlüsselungsmethode zu tun, die für jeden Browser verwendet wird (normalerweise Standard auf der Grundlage des Standorts)

    "Webbrowser, die in den Vereinigten Staaten erstellt wurden, z. B. Netscape Navigator und Internet Explorer, verwenden die Buchstaben U, I und N, um die Verschlüsselungsstärke in der User-Agent-Zeichenfolge anzugeben. Bis 1996, als die United States Regierung die Verschlüsselung mit den Schlüsseln länger verweigerte Als "USA" (für die Version mit 128-Bit-Verschlüsselung) steht "I" für "International" – der Browser hat 40- Bit-Verschlüsselung und kann überall auf der Welt verwendet werden – und "N" steht (de facto) für "Keine" (keine Verschlüsselung). [10] Nach dem Heben von Exportbeschränkungen unterstützten die meisten Anbieter eine 256-Bit-Verschlüsselung. "

    Quelle: http://de.wikipedia.org/wiki/User_agent#Encryption_strength_notations

    Efusiens Antwort (Nov 11 '13 um 20:18) arbeitet für mich , obwohl eine Variable nicht deklariert wurde, und ein Komma wurde an einem Ort statt eines Semikolons verwendet, was zu einem großen Scheitern für alle, die eine Kopie suchen / Einfügen Antwort .

    Das Folgende ist was für mich gearbeitet, einschließlich eines praktischen Beispiels mit einem "Wenn es die native Browser" Bedingung ist:

     var navU = navigator.userAgent; // Android Mobile var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; // Android Browser (not Chrome) var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); var isAndroidBrowser = isAndroidMobile && appleWebKitVersion !== null && appleWebKitVersion < 537; $(window).load(function() { if (isAndroidBrowser) { // It's Android's native browser (and not Chrome), so do something } }); 

    Es sieht aus wie die Anwesenheit von "Linux, U, Android" ist ein konsistentes Unterscheidungsmerkmal für den Bestands-Browser. Wer weiß was das "U" bedeutet, aber ich vermute, es wird in Zukunft unzuverlässig sein. Hoffentlich wird der Browser entweder weggehen oder anfangen, wie Chrome zu spielen, wenn sich die Saiten ändern. Einige andere Strings sind unten zum Vergleich

    Android Chrome: "Mozilla / 5.0 (Linux, Android 4.1.2, SAMSUNG-SGH-I727 Build / JZO54K) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 28.0.1500.94 Mobile Safari / 537.36"

    Android Firefox: "Mozilla / 5.0 (Android; Mobile; rv: 23.0) Gecko / 23.0 Firefox / 23.0"

    Android Opera: "Mozilla / 5.0 (Linux, Android 4.1.2, SAMSUNG-SGH-I727 Build / JZO54K) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 28.0.1500.63 Mobile Safari / 537.36 OPR / 15.0.1162.61541"

    Wenn JavaScript statt serverseitiger UA-Schnüffeln eine Option für Sie ist, probiere (!!window.chrome) && (!window.chrome.app) . Ich kann aber nicht garantieren, dass dieser "sicher" ist, wird "für immer" arbeiten, oder so ähnlich. Betrachte es als einen bösen Hack, der nur für Testzwecke verwendet werden soll.

    Erläuterung: Chrome (oder Chromium?) Browser (gut, die, die ich hier getestet habe, die Chrome und Android auf Cyanogenmod 10 waren) haben ein Objekt namens window.chrome , aber auf dem Android-Bestands-Browser, den ich zumindest getestet habe, Dieses Objekt hat nicht die app Eigenschaft.

    Bearbeiten: Scheint wie ältere Chrome-Versionen geben falsche Positives mit dieser Lösung. Im Gegenzug werden neuere Versionen des Aktienbrowsers höchstwahrscheinlich "falsche Negative" geben.

    Du bekommst keinen android in der UA, weil du die Desktop-Ansicht benutzt hast. Es gibt scheinbar keine Möglichkeit zu erkennen, dass dies ein mobiles Gerät in diesem Modus ist. Sobald du zur normalen Ansicht wechsest, wirst du die richtige UA sehen.

    Ich denke, du suchst das nach:

    Android native Browser nicht über Version 534.30 aktualisiert, so können Sie Filter auf die Version und Android UA String Kombination (oben können wir vermuten, ein Chrome Browser)

    Hier ist mein Beispiel JavaScript-Code:

    (Wenn du ein spezielles Styling brauchst, würde ich eine Klasse zum Körper mit dem folgenden JS-Snippet hinzufügen)

     var defectAndroid = $window.navigator && $window.navigator.userAgent.indexOf('534.30') > 0 && $window.navigator.userAgent.toLowerCase().match(/android/); if (defectAndroid) { // sample code specific for your Android Stock browser } 

    (Einige Android-Geräte berichten 'android', deshalb brauchen wir die Kleinbuchstaben-Konversation)

    Samsung Galaxy Note 3 läuft Android 4.4.2 hat die folgenden UA-String für die Lager 'Internet' Browser ( nicht Chrome oder einem anderen Browser):

     Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36 

    Samsung Galaxy S5 läuft Android 4.4.2 hat die folgenden UA-String für die Lager 'Internet' Browser ( nicht Chrome oder einem anderen Browser):

     Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG SM-G900H Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36 

    Wir können nicht mehr auf AppleWebKit <537 überprüfen.

    Ich prüfe derzeit, ob AppleWebKit <537 ODER Chrome <29 mit der Methode von efusien verwendet wird.

    Ref von Nicks und efusiens Antworten. Das funktioniert für mich mit Android OS 4.4.2

     // Native Android Browser var navU = navigator.userAgent; var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); var regExChrome = new RegExp(/Chrome\/([\d.]+)/); var resultChromeRegEx = regExChrome.exec(navU); var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1])); var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion >= 537) && (chromeVersion !== null && chromeVersion < 29); 

    Denn jetzt bei Kitkat, native Browser auf Android verwendet WebKit 537.36 wie Chrome, wenn wir userAgent protokollieren. Durch die Überprüfung auch chromeVersion <29 dann kann ich native Browser auf Android 4.4.2 bekommen. (Chrome Version auf meinem Samsung S4 ist jetzt 40).

    Sehen Sie in diesem Link WebKit Tabelle auf verschiedene Android-Version: http://jimbergman.net/webkit-version-in-android-version/

    Ich muss Android-Stock-Browser erkennen, um einige benutzerdefinierte Stile hinzuzufügen, da es nicht scheint, Box-Sizing richtig zu behandeln. Der Code, den ich verwendete, basiert auf @Prakarangs Antwort, die nicht für mich arbeitete. (Es hat den Aktien-Browser nicht auf einer Galaxy Note 2 erkannt)

     var navU = navigator.userAgent; var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); var isAndroidStockBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 535); 

    Vielleicht ist das auch für jemand anderes hilfreich.

    Sie müssen SamsungBrowser aus Ihrem regexp entfernen.

    Für SamSungBrowser kannst du SamsungBrowser / ([0-9] *. [0-9] *) oder Android verwenden. * SAMSUNG * Version / ([0-9] *. [0-9] *) für alten Browser

    http://developer.samsung.com/technical-doc/view.do?v=T000000203

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.