Подтвердить что ты не робот

Как определить фондовый браузер Android

Переход на http://whatsmyuseragent.com/ показывает мне мой Android-браузер на моем Galaxy Nexus, работающем 4.2.1, имеет пользовательский агент

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

В этом пользовательском агенте нет ничего, что позволяет мне однозначно определить, что это Android-браузер. Приложение Chrome для Android по крайней мере имеет android в UA. Есть ли способ обнаружить Android-приложение для акций?

4b9b3361

Ответ 1

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);

Ответ 2

"Android Browser" - это имя браузера. Может быть, сбивать с толку, но с таким вопросом этого не должно быть. Это браузер, который поставляется с подавляющим большинством устройств Android, и он явно не говорит о Chrome.

Согласно http://www.useragentstring.com/, это полный список строк Android Stock Browser. В настоящее время я не уверен, есть ли лучший способ выбрать все из них сразу, поскольку некоторые будут продолжать добавляться, а также не будут случайно нацелены на Chrome на Android. Надеюсь, кто-то даст вам лучший ответ, поскольку мне любопытно, как лучше всего это сделать.

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

Ответ 3

Вы можете узнать разницу между браузером акций и браузером Chrome, выбрав "Android" в useragent и проверив номер версии AppleWebKit/###.

В Android-браузере Android никогда не было выше 534, а Chrome - 537 или выше.

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;

Это 99% надежный и очень полезный для приложения на Android 4.x с помощью WebView.

== детали (если вы хотите глубже!) ==

Изменить 7: 'AudioNode' in window - это, вероятно, безопасное средство для AOSP (или старого Chrome) по сравнению с современными версиями Chrome. Попробуйте здесь. window.AudioNode был представлен как часть поддержки WebAudio в Chrome 29 (и вряд ли он будет возвращен производителями). На нашем телефоне 4.0.3 есть Chrome 41, а 'AudioNode' in window возвращает true для Chrome и false для AOSP. Вы также можете понюхать другие функции, появившиеся после завершения AOSP-разработки - см. эту ссылку для других потенциальных возможностей, чтобы нюхать. Выберите функцию, представленную до Chrome 42, потому что пользователи Android 4.0 не могут обновить эту версию. Как обычно в Android, наверняка будут странные крайние случаи, но этот снифф, вероятно, так же хорош, как вы можете получить (особенно в сочетании с проверкой версии WebKit < 537).

Изменить 8:

== WebView на Android ==

Проверка на <= 534 - отличный тест при использовании WebView в приложении. определение совместимости для Android 4.3 (последняя версия Android для использования AOSP для WebView), говорит, что пользовательский агент WebView ДОЛЖЕН быть: "Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30".

определение совместимости для Android 4.4 (первая версия Android для использования Chromium для WebView), говорит, что пользовательский агент WebView ДОЛЖЕН быть: 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".

Меньше, чем Android 4.3, очень похоже на определение 4.3 (всегда AOSP). Больше 4.4 очень похоже на определение 4.4 (всегда Chromium).

== AOSP на Android ==

Для браузера на устройстве (не WebView) пользовательский агент не запрещен определением совместимости. Фактическая используемая версия браузера сильно варьируется, поскольку документально на quirksmode и как описано для версия браузера Samsung.

Редактировать 4: Рекомендуемое решение - искать Android без Chrome в пользовательском агенте, как: https://developer.chrome.com/multidevice/user-agent#webview_user_agent, однако он может также необходимо для обеспечения отсутствия /Windows Phone/, поскольку Mobile-IE11-8.1-Update также имеет Android в 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". Изменить 5: https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx показывает, что IE12 на Windows Phone по-прежнему будет содержать Android в пользовательском агенте.

Edit 3: Как заявили комментаторы, есть устройства там с AOSP и >= 535, но это самый надежный тест, который я нашел (мне бы хотелось увидеть что-то лучше). Вы можете попытаться убедиться, что ваш код по-прежнему функционирует, если sniff не удается, и принять, что фрагментация Android означает, что будут нечетные устройства, которые не работают. Пусть покупатель будет бдителен. Редактирование 6: Если посмотреть на некоторые данные для определенного сайта примерно на 1% того, что выглядит как логин AOSP, есть WebKit 537, поэтому, хотя он кажется довольно надежным, он определенно не на 100% надежен.

Изменить 2: Если вы используете WebView в приложении, это обнаружение полезно для Android >= 4.0 && & Android < 4.4.4, поскольку компонент WebView использует AOSP, даже если Chrome установлен на устройстве.

Изменить 1: Поскольку родной андроид теперь "устарел", разумно протестировать его (и использовать флаг для устранения различий, которые невозможно обнаружить с помощью обнаружения функции).

Ответ 4

В настоящее время нет истинного метода для обнаружения этого. Я в настоящее время на Android 4.2.2 запаса Galaxy S4 AT & T, и браузер по умолчанию теперь имеет Chrome в пользовательском агенте (но все еще имеет проблемы с TouchWiz фиксированной позиции)

Пока Samsung не может: a) исправить touchwiz или b) удалить chrome из строки ua, у нас нет истинного метода обнаружения браузера по умолчанию Android. Я не могу сказать, если это относится ко всем телефонам 4.2x +, но это большая проблема для разработчиков команд, требующих специфических запросов для производства/браузера.

Я обособленно от активной группы разработчиков мобильных веб-приложений, и, похоже, TouchWiz вызывает множество проблем для разработки различных аспектов.

Другой проблемой являются такие компании, как Dolphin (отличный браузер, ужасный UA), который во всех этих случаях будет всплывать в качестве браузера по умолчанию, поскольку он не предоставляет строку "дельфина" и использует AppleWebKit534x


Также относительно U в строке user-agent он не имеет никакого отношения к тому, что браузер. Infact это связано с тем, что метод шифрования используется для каждого браузера (обычно стандартно на основе местоположения).

"Веб-браузеры, созданные в Соединенных Штатах, такие как Netscape Navigator и Internet Explorer, используют буквы U, я и N, чтобы указать силу шифрования в строке пользовательского агента. До 1996 года, когда правительство Соединенных Штатов отказалось от шифрования с ключами длиной более 40 бит, которые будут экспортированы, поставщики отправили различные версии браузера с различной прочностью на шифрование." U "означает" США "(для версии с 128-битным шифрованием)," I "означает" Международный "- браузер имеет 40-битное шифрование и может использоваться в любой точке мира - и" N "стоит (де-факто) для" Нет "(без шифрования). [10] После отмены ограничений на экспорт большинство поставщиков поддерживают 256-битное шифрование."

Источник: http://en.wikipedia.org/wiki/User_agent#Encryption_strength_notations

Ответ 5

efusien answer (ноябрь 11,13 в 20:18) работает для меня, хотя переменная не была объявлена, а запятая была использована в одном месте вместо точки с запятой, , что приводит к большому сбою для всех, кто ищет ответ для копирования/вставки.

Следующее - это то, что сработало для меня, включая практический пример с условием "если это родной браузер":

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 Android native browser (and not Chrome), so do something
    }
});

Ответ 6

Похоже, присутствие "Linux; U; Android" является последовательным отличием для браузера акций. Кто знает, что означает "U", но я подозреваю, что это будет ненадежным в будущем. Будем надеяться, что браузер либо уйдет, либо начнет играть, как Chrome, когда строки меняются. Некоторые другие строки ниже для сравнения

Android Chrome: "Mozilla/5.0 (Linux, Android 4.1.2, SAMSUNG-SGH-I727 Build/JZO54K) AppleWebKit/537.36 (KHTML, например, 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, например, Gecko) Chrome/28.0.1500.63 Mobile Safari/537.36 OPR/15.0.1162.61541"

Ответ 7

Если для вас вариант JavaScript, а не серверный нюанс UA, попробуйте (!!window.chrome) && (!window.chrome.app). Я не могу гарантировать, однако, что этот "безопасен", будет работать "навсегда" или что-то в этом роде. Считайте это злым взломом, который будет использоваться только для целей тестирования.

Объяснение: Браузеры Chrome (или Chromium?) (ну, те, которые я тестировал здесь, которые были в Chrome и Android на Cyanogenmod 10), имеют объект с именем window.chrome, но в браузере Android Android, который я тестировал по крайней мере, этот объект не имеет свойства app.

Изменить: похоже, что старые версии Chrome предоставят ложные срабатывания с этим решением. В свою очередь, более новые версии браузера акций, скорее всего, дадут "ложные негативы".

Ответ 8

Вы не получаете android в UA, потому что используете Desktop View. Кажется, нет способа определить, что это мобильное устройство в этом режиме. Когда вы переключитесь на обычный режим просмотра, вы увидите правильный UA.

Ответ 9

Я думаю, вы ищете это:

Собственный браузер Android не обновлен выше версии 534.30, поэтому вы можете фильтровать версию и комбинацию символов Android UA (выше мы можем предположить, что браузер Chrome)

Вот мой пример кода JavaScript:

(Если вам нужен специальный стиль, я бы добавил класс в тело со следующим фрагментом JS)

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
}

(Некоторые Android-устройства сообщают "андроид", почему нам нужен разговор в нижнем регистре)

Ответ 10

Samsung Galaxy Note 3 под управлением Android 4.4.2 имеет следующую строку UA для браузера "Интернет" (не Chrome или любого другого браузера):

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 под управлением Android 4.4.2 имеет следующую строку UA для браузера "Интернет" (не Chrome или любого другого браузера):

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

Мы можем не только проверить AppleWebKit < 537.

Сейчас я проверяю, будет ли AppleWebKit < 537 или Chrome < 29 с использованием пользовательского метода efusien.

Ответ 11

Ссылка на ответы Ника и Эфузена. Это работает для меня с ОС Android 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);

потому что теперь в Kitkat собственный браузер на Android использует WebKit 537.36 так же, как Chrome, когда мы регистрируем userAgent. Проверяя также chromeVersion < 29 затем я могу получить собственный браузер на Android 4.4.2. (Версия Chrome на моем Samsung S4 теперь составляет 40).

См. в этой ссылке таблицу WebKit в разных версиях Android: http://jimbergman.net/webkit-version-in-android-version/

Ответ 12

Мне нужно обнаружить Android Stock Browser, чтобы добавить некоторые пользовательские стили, потому что он, похоже, неправильно обрабатывает размер окна. Код, который я использовал, основан на ответе @Prakarangs, который не работал у меня. (Он не обнаружил браузер запаса в примечании к галактике 2)

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);

Возможно, это тоже полезно для кого-то другого.

Ответ 13

Вы должны удалить SamsungBrowser из своего регулярного выражения.

Для SamSungBrowser вы можете использовать SamsungBrowser/([0-9] *. [0-9] *) или Android. * SAMSUNG. * Версия /([0-9] *. [0-9] *) для старого браузера

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