Виявити користувачів iPad за допомогою jQuery?


Відповіді:


317

Виявлення iPad

Ви можете виявити користувача iPad, ознайомившись із userAgentвластивістю:

var is_iPad = navigator.userAgent.match(/iPad/i) != null;

Виявлення iPhone / iPod

Аналогічно platformвластивість перевіряти такі пристрої, як iPhone або iPod:

function is_iPhone_or_iPod(){
     return navigator.platform.match(/i(Phone|Pod))/i)
}

Примітки

Хоча це працює, як правило, слід уникати виявлення конкретного браузера, оскільки це часто може бути ненадійним (і може бути підробленим). Переважно використовувати фактичне виявлення функцій у більшості випадків, що можна зробити через бібліотеку типу Modernizr .

Як зазначалося у відповіді Бреннена , проблеми можуть виникати при виконанні цього виявлення в додатку Facebook. Будь ласка, дивіться його відповідь щодо вирішення цього сценарію.

Суміжні ресурси


9
да, ти маєш різницю між підходом jQuery та підходом Javascript?
Хармен

4
Чому у цього 2 пальця вниз?
Ракета Хазмат

3
Чи існує метод його виявлення в основі функцій підтримки, щоб не використовувати агент користувача навігатора?
альбанкс

6
Один помилка (має бути iPad замість iPod) "a" not "o".
Satish

4
Спасибі Сатіш - я задумав цей розділ бути для iPod. Я включив це як дотичну до початкового питання.
Rion Williams

22

Хоча прийняте рішення є правильним для iPhone, воно буде неправильно заявляти isiPhoneі isiPadпро те, і для користувачів, які відвідують ваш сайт на своєму iPad, з програми Facebook , буде неправильно .

Загальна мудрість полягає в тому, що пристрої iOS мають агент користувача для Safari та користувацький агент для UIWebView. Це припущення невірно, оскільки програми iOS можуть налаштувати їх користувальницький агент. Основний правопорушник тут - Facebook.

Порівняйте ці рядки агентів користувача з пристроїв iOS:

# iOS Safari
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3
iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

# UIWebView
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117

# Facebook UIWebView
iPad: Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1.1;FBBV/4110.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0]
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; ru_RU) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1;FBBV/4100.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; tablet;FBLC/en_US]

Зауважте, що на iPad, рядок користувальницьких агентів UIWebView Facebook включає "iPhone".

Старий спосіб ідентифікації iPhone / iPad у JavaScript:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);

Якщо ви хочете скористатися таким підходом до виявлення iPhone та iPad, ви отримаєте IS_IPHONE та IS_IPAD, якщо вони приходять з Facebook на iPad. Це може створити якусь дивну поведінку!

Правильний спосіб ідентифікації iPhone / iPad у JavaScript:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
if (IS_IPAD) {
  IS_IPHONE = false;
}

Ми оголошуємо IS_IPHONE неправдивою для iPad, щоб захищати химерний користувальницький агент UIWebView iPad Facebook. Це один із прикладів того, як нюхання агентом користувача ненадійно. Чим більше додатків для iOS, які налаштовують свій користувальницький агент, тим більше буде проблем з нюханням агента користувача. Якщо ви можете уникнути нюху агента користувача (підказка: CSS Media Queries), Зробіть це.


1
Ви можете комбінувати відповідність iPhone / iPod в один регекс, наприклад /iPh?o(ne|d)/i, або /(iPhone|iPod)/iякщо ви збираєтесь випустити iPhod: P.
Коббі

9

Я використовую це:

function fnIsAppleMobile() 
{
    if (navigator && navigator.userAgent && navigator.userAgent != null) 
    {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var arrMatches = strUserAgent.match(/(iphone|ipod|ipad)/);
        if (arrMatches != null) 
             return true;
    } // End if (navigator && navigator.userAgent) 

    return false;
} // End Function fnIsAppleMobile


var bIsAppleMobile = fnIsAppleMobile(); // TODO: Write complaint to CrApple asking them why they don't update SquirrelFish with bugfixes, then remove

Наявно саме це я шукав.
techie_28

Він не працює на робочому столі, тому що якщо він не може знайти об'єкт, що повертається, з нульовим вмістом, я змінив другу умову і працює чудово: if (arrMatches! = Null) {return true; }
Джо Л.

8

Я використовую це:

//http://detectmobilebrowsers.com/ + tablets
(function(a) {
    if(/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|playbook|silk/i.test(a)
    ||
    /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))
    {
        window.location="yourNewIndex.html"
    }
})(navigator.userAgent||navigator.vendor||window.opera);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.