Автоматичне виявлення мобільного браузера (через користувальницький агент?) [Закрито]


291

Як я можу виявити, якщо користувач переглядає мій веб-сайт із веб-браузера для мобільних пристроїв, щоб потім я міг автоматично виявити та відобразити відповідну версію свого веб-сайту?


12
Чи враховується iPad? :)
Сева Алексєєва

33
Коментар Севи викликає гарне запитання. Що насправді означає "мобільний"? Чи посилається це на "функціональний телефон", який має браузер, але не великий? Чи відноситься це до повнофункціональних смартфонів, де спосіб введення та роздільна здатність дисплея є обмежуючими факторами? Як щодо планшетів, з якими легко взаємодіяти і мають екрани з високою роздільною здатністю? Як щодо пристроїв, таких як медіа-центри - вони ніколи не виходять з вітальні, але вони мають подібні обмеження. Друг по роботі надіслав мені це. Я вважав це дуже проникливим. slideshare.net/bryanrieger/rethinking-the-mobile-web-by-yiibu
spaaarky21

1
@ Ricki, але на ipad ви все одно не можете, наприклад, відображати флеш-вміст або використовувати редактор текстових файлів на основі JavaScript, наприклад, tinymce.
TJ Ellis

1
ipad не може переглядати спалах, але це інша тема, як-от виявити, чи підтримує браузер Flash.
Шон

2
Просто повідомлення з майбутнього, але всіх, хто зацікавлений у обслуговуванні мобільної версії свого сайту, можуть зацікавити деякі статті про "чуйний дизайн".
Ваель Вірус

Відповіді:


91

Так, читання заголовка User-Agent дозволить зробити це.

Є деякі списки з там відомих мобільних агентів користувачів , так що вам не потрібно починати з нуля. Що я робив, коли мені довелося, - це створити базу даних відомих користувальницьких агентів і зберігати невідомі, коли вони виявляються для перегляду, а потім вручну з'ясувати, що вони є. Останнє в деяких випадках може бути надмірним.

Якщо ви хочете зробити це на рівні Apache, ви можете створити сценарій, який періодично генерує набір правил перезапису, перевіряючи агент користувача (або просто один раз і забудьте про нові користувацькі агенти, або раз на місяць, що підходить для вашої справи), наприклад

RewriteEngine On

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

який перемістить, наприклад, запити на http: //domain/index.html до http: //domain/mobile/index.html

Якщо вам не подобається підхід до того, щоб сценарій періодично відтворював файл htaccess, ви можете написати модуль, який перевіряє User Agent (я не знайшов такого вже зробленого, але знайшов цей особливо відповідний приклад ) та отримати користувальницьких агентів з деяких сайтів для їх оновлення. Тоді ви можете ускладнити підхід скільки завгодно, але я думаю, що у вашому випадку попередній підхід був би добре.


3
Чи можна це досягти на рівні веб-сервера (Apache) за допомогою якогось типу .htaccess команди - замість того, щоб використовувати мову сценаріїв, як PHP?

будь-яка ідея встановити корінь документа користувачем-агентом
Карсон

126

У браузері Detect Mobile є скрипти з відкритим кодом, які роблять це в Apache, ASP, ColdFusion, JavaScript та PHP.


5
@guitar Якщо це так, вам слід надіслати свою адресу.
Адам Таттл

9
Бле ... мені дуже не подобається "кодовий запах" цих рішень. Збірка Regex за допомогою купки 4-символьних префіксів без підказки щодо того, звідки вони спочатку походили ... ні, дякую.
Ми всі Моніка

2
Це одне knarly regex твердження. Я погоджуюсь, кодовий запах не є гарним на цьому.
Джек Кокс

5
Мені теж не подобаються рішення з відкритим кодом без ліцензії та відсутність вказівки на оновлення.
Едуардо

12
Немає жодного способу обійти це. На якомусь рівні будь-який тип рішення збирається провести перевірку регулярного вираження на користувальницькому агенті.
Кайл

33

Просто думка, але що робити, якщо ви вирішили цю проблему з протилежного напрямку? Замість того, щоб визначити, які браузери є мобільними, чому б не визначити, які не? Потім кодуйте свій сайт за умовчанням до мобільної версії та перенаправляйте на стандартну версію. При перегляді мобільного браузера є дві основні можливості. Або він підтримує javascript, або його немає. Отже, якщо браузер не підтримує javascript, він буде за замовчуванням для мобільної версії. Якщо у нього є підтримка JavaScript, перевірте розмір екрана. Що-небудь нижче певного розміру, ймовірно, також буде мобільним браузером. Все, що більше, буде переспрямоване на ваш стандартний макет. Тоді все, що вам потрібно зробити, це визначити, користувач із відключеним JavaScript мобільний чи ні.
За даними W3C, кількість користувачів з відключеною JavaScript склала близько 5%, і більшість тих користувачів відключили це, що означає, що вони насправді знають, що роблять із браузером. Вони є значною частиною вашої аудиторії? Якщо ні, то не переживайте за них. Якщо так, то найгірший сценарій? У вас є користувачі, які переглядають мобільну версію вашого сайту, і це добре.


3
Це дуже гарна ідея, я думаю, що це елегантне рішення.
Максим Векслер

3
+1 це звучить як дуже приємна ідея, але чи вплине це на сканери пошукових систем?
Mikey G

Це хибна ідея. Розширення для браузерів, які вимикають JavaScript, дуже популярні в настільних браузерах, тому припускати, що жоден JavaScript не означає, що мобільний - це просто неправильно. Роздільна здатність вікна / вікна перегляду / екрана не має нічого спільного з розміром веб-переглядача, і якщо припустити, що низька роздільна здатність вказує на розмір ручної роботи, зробить ваш веб-додаток потворним і розчарувальним для багатьох користувачів. (Наприклад: браузери на робочому столі в
неповноекранних

31

Ось як я це роблю в JavaScript:

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

Дивіться приклад на веб-сайті www.tablemaker.net/test/mobile.html, де він втричі збільшує розмір шрифту на мобільних телефонах.


якщо ви хочете об'єднати свої акаунти, дивіться тут: meta.stackexchange.com/questions/18232/…
Брендон

Це не спрацює, якщо мова йде про планшет (наприклад, iPad)
Si8,

Використовуйте "mobi" через Opera Mobile.
mgutt

1
І вам потрібна "Opera Mini", оскільки це один з рідкісних браузерів, які не використовують "mobi" в User Agent.
mgutt

17

Мій улюблений механізм виявлення мобільного браузера - WURFL . Він оновлюється часто і працює з усіма основними платформами / мовними платформами.


Це добре, але твердження "працює з кожною основною програмою / мовною платформою" трохи сміливе.
Кайл


Тепер він доступний лише під набридливою ліцензією AGPL, якщо ви не купуєте його. en.wikipedia.org/wiki/WURFL#License_update
MarkJ

17

Чи обдумали ви використовувати медіа-запити css3? У більшості випадків ви можете застосувати деякі стилі css спеціально для цільового пристрою, не створюючи окремої мобільної версії сайту.

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

Ви можете встановити ширину на все, що завгодно, але 1025 сприйме пейзажний вид iPad.

Ви також захочете додати в голову такий метатег:

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

Перегляньте цю статтю в HTML5 Rocks, щоб знайти кілька хороших прикладів


1
Я думаю, що це насправді найкращий шлях. Сценарії, які дивляться на рядки User Agent, призначені застаріти. Дивлячись на доступну нерухомість екрану, можна чуйний дизайн, не хвилюючись про те, що нові пристрої не будуть виявлені.
Адам Таттл

1
Це працює лише для виявлення на стороні клієнта. Але якщо ви хочете, щоб ваш сервер поводився по-різному для мобільних клієнтів, вам потрібно буде використовувати якусь іншу техніку.
Ігор Брейц

Це погано підходить для настільних браузерів, які не працюють на весь екран. Якщо ви все-таки вирішите це зробити, будь ласка, не витрачайте простір на екрані з величезними шрифтами та полями та не ховайте важливу функціональність / інформацію за спадними меню. Це зробить ваш сайт / додаток некрасивим і засмутить для деяких ваших користувачів.
ʇsәɹoɈ

13

для 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>

Я вважав це досить корисним.
bozdoz

Ви обов'язково повинні перевірити Conditionizr, який впорається з усім цим за вас! Ви можете додавати власні тести, отримувати їх за допомогою об'єктних тестів та зворотних викликів. У них також доступний ряд попередніх тестів: conditionizr.com/detects
Halcyon991

Оленеси, дякую за корисну відповідь. Хоча, я не можу знайти жодного UA, що відповідає "windows \ sce" у моєму db.
nefski

1
Це не працює для Windows телефонів.
jwerre

дякую, але телефон Windows не вказано ...
Хорхесіс

6

Файл браузера мобільних пристроїв - це чудовий спосіб виявити мобільні (та інші) броузери для проектів ASP.NET: http://mdbf.codeplex.com/


Чи все ще працює браузер мобільних пристроїв? Я зауважую, що існує позначення того, що це не в режимі офлайн? ...
creativeedg10

5

Ви можете виявити мобільних клієнтів просто за допомогою navigator.userAgentта завантажувати альтернативні сценарії на основі виявленого типу клієнта як:

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

    });

Для більш керованого рішення ви можете використовувати Conditionizr, який буде обробляти все це за вас! Ви можете додавати власні тести, отримувати їх за допомогою об'єктних тестів та зворотних викликів. У них також доступний ряд попередніх тестів: conditionizr.com/detects
Halcyon991

4

Ви можете перевірити рядок User-Agent. У JavaScript це дуже просто, це лише властивість об’єкта навігатора.

var useragent = navigator.userAgent;

Ви можете перевірити, чи пристрій iPhone чи Blackberry в JS щось подібне

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

якщо isIphone вірно, ви отримуєте доступ до сайту з Iphone, якщо isBlackBerry ви отримуєте доступ до сайту від Blackberry.

Для перевірки цього ви можете використовувати плагін "UserAgent Switcher" для Firefox.

Якщо ви також зацікавлені, можливо, варто перевірити мій сценарій "перенаправлення_mobile.js", розміщений на github тут, https://github.com/sebarmeli/JS-Redirection-Mobile-Site, і ви можете прочитати більш детальну інформацію в одному з моя стаття тут:

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


1
Використання .match тут неправильне, ви хочете використовувати .test (), що оцінює бульне значення, воно також набагато швидше, ніж .match (), і не повертає масив. Для більш керованого рішення для вашого тестування userAgent, ви можете використовувати Conditionizr, який буде обробляти все це за вас! Ви можете додавати власні тести, отримувати їх за допомогою об'єктних тестів та зворотних викликів. У них також доступний ряд попередніх тестів: conditionizr.com/detects
Halcyon991

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

Цей приклад працює в asp.net



0

Так, користувацький агент використовується для виявлення мобільних браузерів. Існує безліч безкоштовних сценаріїв, щоб перевірити це. Ось один такий php-код, який допоможе вам перенаправити мобільних користувачів на різні веб-сайти.


1
Чи можна це досягти на рівні веб-сервера (Apache) через якийсь тип команди .htaccess - замість використання PHP?

0

Я розміщую цю демонстрацію із включеними сценаріями та прикладами:

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

Цей приклад використовує функції php для виявлення агента користувача та пропонує додаткову перевагу, дозволяючи користувачам заявляти про перевагу для тієї версії сайту, яка зазвичай не є типовою залежно від типу їх браузера чи пристрою. Це робиться за допомогою файлів cookie (підтримується за допомогою php на стороні сервера на відміну від javascript.)

Обов’язково перегляньте посилання для завантаження в статті для прикладів.

Сподіваюся, вам сподобається!


0

MobileESP має гачки PHP, Java, APS.NET (C #), Ruby та JavaScript. він також має ліцензію Apache 2, настільки безкоштовну для комерційного використання. Найголовніше для мене - це лише те, що він визначає браузери та платформи, а не розміри екрана та інші показники.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.