Как определить модель iPad через JavaScript?

На «Хабре» наткнулся на любопытный код на JS, который определяет с каким Айпадом мы имеем дело — первым, вторым или третьим. Третий ото всех остальных отличить просто — у него в свойстве «devicePixelRatio» значение „2“ записано. А первый от второго как?

Оказывается способ есть — надо в событии «devicemotion» проверить есть ли у устройства акселерометр. Не знаю для чего это всё может пригодиться (разве что отключать какие-то ресурсоёмкие спецэффекты), но знать о том, что такая возможность проверки есть, не помешает.

Я немного переписал код, сделал из него функцию, чуть упростил и навёл порядок. Получился вот такой код:
// функция для определения модели Айпада
function detectIPadVersion(callback, undefined) {
    if ('ondevicemotion' in window) {
        window.addEventListener('devicemotion', function self(event) {
            if (~navigator.platform.indexOf('iPad')) {
                var version = event.acceleration ? (window.devicePixelRatio === 2) + 2 : 1;
            }
            window.removeEventListener('devicemotion', self);

            callback(version);
        }, false);
    } else {
        callback(undefined);
    }
};

// пример вызова, в callback будет передан номер модели (1,2 или 3) или undefined, в случае, если это не iPad
detectIPadVersion(alert);
29 июня 2012 21:54

Неуч (инкогнито)
29 июня 2012, 22:47

в version будет или 1 или 3, но не 2, правильно?

Неуч (инкогнито)
29 июня 2012, 22:48

Ах, прошу прощения, 2 тоже будет

Orcinus Orca (orcinus.ru)
30 июня 2012, 06:45

Красивое решение. Его можно использовать в своих проектах?

Eyeless (инкогнито)
30 июня 2012, 07:17

Упростили и навели порядок, заменив проверку условия на сложение boolean с int? Ну-ну.

Неуч (инкогнито)
30 июня 2012, 07:48, ответ предназначен Eyeless

>Упростили и навели порядок, заменив проверку условия на сложение boolean с int? Ну-ну.
Изящно же

bolk (bolknote.ru)
30 июня 2012, 10:24, ответ предназначен Orcinus Orca (orcinus.ru):

Красивое решение. Его можно использовать в своих проектах?
Можно, конечно!

bolk (bolknote.ru)
30 июня 2012, 10:27, ответ предназначен Eyeless

Упростили и навели порядок, заменив проверку условия на сложение boolean с int? Ну-ну.
А что вас смущает-то?

ku (инкогнито)
30 июня 2012, 20:17

("всем") А ни у кого нет привычки переставлять очень короткие if/else части первыми?

Orcinus Orca (orcinus.ru)
30 июня 2012, 20:23, ответ предназначен bolk (bolknote.ru):

спасибо...

bolk (bolknote.ru)
30 июня 2012, 21:44, ответ предназначен ku

А ни у кого нет привычки переставлять очень короткие if/else части первыми?
Это как?

maxim-zotov (инкогнито)
1 июля 2012, 07:27, ответ предназначен bolk (bolknote.ru):

Это как?
Инвертировать условие, чтобы первым шел короткий блок,
 if (!('ondevicemotion' in window)) {
    callback(undefined);
 } else {
   //длинный блок
 }

Смысл в том, что когда сначала идет простое действие, проще уследить за логикой алгоритма, вся конструкция "if then else" легко обозрима, находится на двух-трех строках, быстренько разделался с формальным ответвлением и занимаешься реальным делом. Когда сначала идет длинный блок, то когда настанет else, уже успеешь потерять нить, к чему именно был этот else. Это расположение физически рядом тех блоков, которые рядом логически. Цена - ухудшение читаемости условия if, лишнее отрицание не украшает программу.

bolk (bolknote.ru)
1 июля 2012, 10:44, ответ предназначен maxim-zotov

А, не я так не делаю, я делаю другое — слежу, чтобы первое условие было без отрицания. Мне так эстетичнее кажется.

Eyeless (инкогнито)
4 июля 2012, 09:24, ответ предназначен Неуч

Ага, изящества через край. И первый же камент, где переспрашивается, что оно должно делать.

bolk (bolknote.ru)
4 июля 2012, 14:49, ответ предназначен Eyeless

Это показатель чего?

bolk (bolknote.ru)
4 июля 2012, 15:05, ответ предназначен Eyeless

Мне ещё интересно, откуда у вас столько желчи.

Eyeless (инкогнито)
5 июля 2012, 05:26, ответ предназначен bolk (bolknote.ru):

Исключительно того, что это не просто и не порядок.

Eyeless (инкогнито)
5 июля 2012, 05:28, ответ предназначен bolk (bolknote.ru):

Желчи? У меня? Вы хотите поговорить об этом?

bolk (bolknote.ru)
5 июля 2012, 07:46, ответ предназначен Eyeless

Исключительно того, что это не просто и не порядок.
Это не наведение порядка, это упрощение. Это очень просто, правда. Я, конечно, понимаю, что программисты вырождаются, но не настолько же.
Желчи? У меня? Вы хотите поговорить об этом?
Желчи. У вас. Нет.

Eyeless (инкогнито)
5 июля 2012, 16:55, ответ предназначен bolk (bolknote.ru):

var a = condition ? 2 : 3; куда проще. И вопросов типа первого не вызывает. И даже уже присутствует в той же строчке.

bolk (bolknote.ru)
5 июля 2012, 23:12, ответ предназначен Eyeless

var a = condition + 2 куда проще и вопросов никаких не вызывает.

Eyeless (инкогнито)
6 июля 2012, 06:53, ответ предназначен bolk (bolknote.ru):

Вызывает, прочитайте первый же(!) комментарий к заметке.
Что ж до конца-то тогда не пошли?
var version = 1 + (event.acceleration !== undefined) + (window.devicePixelRatio === 2);

bolk (bolknote.ru)
6 июля 2012, 07:32, ответ предназначен Eyeless

Вызывает, прочитайте первый же(!) комментарий к заметке.
Я не знаю квалификации Неуча, но возможно его ник говорящий.
Что ж до конца-то тогда не пошли?
До какого конца-то? То, что вы написали, мне не нравится, мне нравится мой вариант. Кстати, с чем вы спорите, я не понял? Вот с этой единственной строчкой? Ну так скопируйте код себе, исправьте на то что нравится и перестаньте мне морочить голову.

Eyeless (инкогнито)
6 июля 2012, 10:33

Ну да. Начинали с "просто и понятно", скатились в "нравится". Собсно, об чем речь и была.

bolk (bolknote.ru)
6 июля 2012, 15:41, ответ предназначен Eyeless

Как вы умудряетесь прочитывать не то, что написано?

Он не может одновременно быть понятным и нравится что ли? Ваш вариант тоже простой, но он мне не нравится. Почему я должен написать так как вы предлагаете — мне не ясно. Скопируйте себе и пишите как нравится вам. Делов-то.

Eyeless (инкогнито)
6 июля 2012, 20:46, ответ предназначен bolk (bolknote.ru):

tsya.ru
Просто не нужно называть приведение к нравящемуся варианту "упрощением и наведением порядка". Делов-то.

bolk (bolknote.ru)
7 июля 2012, 17:33, ответ предназначен Eyeless

Всё что я хотел сказать, я уже сказал.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)