Есть ли способ определить, использует ли текущий пользователь iPad с помощью jQuery / JavaScript?
Обнаруживать пользователей iPad с помощью jQuery?
Ответы (4)
Обнаружение 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)
}
Примечания
Несмотря на то, что это работает, вам, как правило, следует избегать выполнения специфичного для браузера обнаружения, поскольку оно часто может быть ненадежным (и может быть подделано). Предпочтительно использовать актуальную функцию / a> в большинстве случаев, что можно сделать с помощью такой библиотеки, как Modernizr.
Как указано в ответе Бреннена, при выполнении этого обнаружения в приложении Facebook могут возникнуть проблемы. Пожалуйста, посмотрите его ответ, чтобы справиться с этим сценарием.
Связанные ресурсы
- jQuery HowTo: обнаружение пользователей iPad с помощью JavaScript
- jQuery HowTo: обнаружение и перенаправление пользователей iPad / iPhone < / а>
- Блог Дэвида Уолша: обнаружение использования iPad
- Обнаружение использования iPad через PHP < / а>
!== null
, чтобы быть быстрее? :-) Просто шучу! Спасибо за повторный анализ всей статьи, которую вы предоставили, и за то, что поделились этим кодом.
- person Marco Demaio; 09.09.2011
isiPhone
истинным, если пользователь заходит на ваш сайт на iPad из приложения Facebook. Полное объяснение см. В моем ответе.
- person Brennan Moore; 31.12.2012
Хотя принятое решение правильно для 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 строка пользовательского агента Facebook UIWebView включает «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, чтобы прикрыть странный пользовательский агент Facebook UIWebView для iPad. Это один из примеров того, как сниффинг пользовательского агента ненадежен. Чем больше приложений iOS настраивают свой пользовательский агент, тем больше проблем будет возникать при сниффинге пользовательского агента. Если вы можете избежать сниффинга пользовательского агента (подсказка: CSS Media Queries), СДЕЛАЙТЕ ЭТО.
/iPh?o(ne|d)/i
или /(iPhone|iPod)/i
, если вы собираетесь выпускать iPhod: P.
- person Cobby; 13.12.2012
Я использую это:
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
Я использую это:
//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);