Обнаружить iPad Mini в HTML5

351

Apple iPad Mini - это меньший клон iPad 2, чем мы хотим. В JavaScript объект window.navigator предоставляет те же значения для Mini и iPad 2. Мои тесты до сих пор, чтобы обнаружить разницу, не привели к успеху.

Почему это важно?

Поскольку экраны iPad Mini и iPad 2 идентичны в пикселях, но меняются в реальном размере (дюймы/сантиметры), они различаются в PPI (пиксели на дюйм).

Для веб-приложений и игр, предлагающих дружественный пользовательский интерфейс, определенные элементы настраиваются по размеру относительно большого пальца пользователя или положения пальца, поэтому мы можем захотеть масштабировать определенные изображения или кнопки, чтобы обеспечить лучшее качество работы.

Вещи, которые я пробовал до сих пор (включая некоторые довольно очевидные подходы):

  • window.devicepixelratio
  • Ширина элемента CSS в единицах cm
  • CSS-запросы (например, resolution и -webkit-device-pixel-ratio)
  • Рисунки SVG в аналогичных единицах
  • Выполнение всех видов CSS-трансляций веб-трансформ для заданного времени и подсчета отображаемых кадров с помощью requestAnimFrame (я надеялся обнаружить измеримую разницу)

Я свеж от идей. Как насчет вас?

Обновление Спасибо за ответы до сих пор. Я хотел бы прокомментировать людей, голосовавших против обнаружения iPad mini против 2, поскольку у Apple есть uhm, одна рекомендация управлять ими всеми. Ладно, здесь мои рассуждения, почему я чувствую, что это действительно имеет смысл в мире, чтобы узнать, использует ли человек iPad mini или 2. И делайте с моими рассуждениями, что вам нравится.

iPad mini - это не только гораздо меньшее устройство (9,7 дюйма против 7,9 дюйма), но его форм-фактор позволяет использовать его в другом месте. IPad 2 обычно удерживается двумя руками при игре, если вы не Чак Норрис. Мини меньше, но он также намного легче и позволяет играть в геймплей, где вы держите его в одной руке, а другой - для салфетки или нажатия или еще чего-то. Как разработчик игр и разработчик, я бы просто хотел знать, если это мини, поэтому я могу выбрать, чтобы предоставить игроку другую схему управления, если я хочу (например, после тестирования A/B с помощью группа игроков).

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

Итак, IMHO это выходит за рамки толстых обсуждений с пальцами/руководствами, и это именно то, что должны сделать Apple и все другие производители: позвольте нам однозначно идентифицировать ваше устройство и думать иначе вместо .

  • 0
    хороший вопрос .. даже я искал решение. Ничего не нашел в сети
  • 3
    Лучше всего сообщить об ошибке на apple bugreporter.apple.com Если достаточно людей, есть надежда, что они нас услышат. Нынешняя ситуация довольно удручающая.
Показать ещё 8 комментариев
Теги:
svg
ipad

23 ответа

251

Воспроизведите стереофонический аудиофайл и сравните реакцию акселерометра, когда громкость звука на правом канале и на левом канале - iPad2 имеет монодинамики, тогда как iPad Mini имеет встроенные стереодинамики.

Вам нужна помощь для сбора данных, пожалуйста, посетите эту страницу и помогите мне собрать данные для этой сумасшедшей идеи. У меня нет iPad mini, поэтому мне действительно нужна ваша помощь.

  • 35
    Вы не думаете, что устройство, издающее звук при посещении веб-сайта, является плохой идеей? Не говоря уже о том, что люди могут отключить устройство. Никакой звук не остановит это.
  • 1
    Аудио iOS будет воспроизводиться только в ответ на сгенерированное пользователем событие (например, нажмите), когда сайт загружается. И я не говорю, что это должен быть случайный шум или очень громкий акселерометр на iDevices, так как iPhone 4 превосходен, вероятно, будет достаточно очень низкого звука. Звук может быть легко интегрирован в естественный поток сайта, так как многие сайты уже издают небольшие звуковые сигналы или воспроизводят музыку и т. Д., Чтобы предоставить обратную связь пользователю.
Показать ещё 14 комментариев
131

Обновление: Похоже, что эти значения сообщают о ширине и высоте окна просмотра во время создания табуляции, и они не меняются при вращении, поэтому этот метод не может использоваться для обнаружения устройства!

Вы можете использовать либо screen.availWidth, либо screen.availHeight, поскольку они кажутся разными для iPad Mini и iPad 2.

iPad Mini

screen.availWidth = 768
screen.availHeight = 1004

iPad 2

screen.availWidth = 748
screen.availHeight = 1024

Источник: http://konstruktors.com/blog/web-design/4396-detect-ipad-mini-javascript/

  • 3
    Пока что выглядит как лучшее бескомпромиссное решение.
  • 0
    Мне интересно об этой разнице. Я думал, что оба используют одинаковое разрешение? Отличается ли Safari Chrome на этих двух устройствах?
Показать ещё 7 комментариев
80

Я понимаю, что это может быть немного низкотехнологичное решение, но поскольку мы пока не можем придумать что-нибудь еще.

Я предполагаю, что вы уже проверяете большинство других устройств, поэтому я вижу следующие сценарии.

Вы можете проверить ВСЕ возможные самые популярные устройства, которым требуется специальный CSS/размер, и если он не соответствует ни одному из них, либо предположите, что это iPad mini, или просто спросите пользователя?

// Device checks here
...
else {
  // it would probably be better to make this a nicer popup-thing
  var mini = prompt("Are you using a iPad mini? Press yes for a better user experience");
  // Store the result for future visits somehow.
}

Я знаю, что сейчас это может показаться глупым, но если у нас в настоящее время нет способа решить, будет ли устройство iPad mini или iPad 2, по крайней мере, веб-сайт будет использоваться с iPad-устройствами, которые делают что-то вроде этого.

Вы можете даже пойти с чем-то вроде этого:

"Чтобы предоставить вам наилучший опыт просмотра, мы пытаемся определить ваш тип устройства, чтобы настроить веб-сайт на ваше устройство. К сожалению, из-за ограничений это не всегда возможно, и мы не можем в настоящее время определить, используете ли вы iPad 2 или iPad mini, используя эти методы.

Для наилучшего просмотра возможностей просмотра выберите, какое устройство вы используете ниже.

Этот выбор будет сохранен для будущих посещений веб-сайта на этом устройстве.

[] iPad 2 
[*] iPad mini
[] Ancient blackberry device

"

Я не совсем понимаю, что вы можете и не можете делать на стороне клиента в Javascript. Я знаю, что вы можете получить IP-адрес пользователя, но возможно ли получить MAC-адрес пользователя? Эти диапазоны отличаются между iPad2 и iPad mini?

  • 25
    Я очень согласен с этим решением. Позволить пользователю выбирать (и потенциально менять) свое устройство лучше, чем привязывать его к тому, что, по вашему мнению, он хочет. Если вы можете определить устройство достаточно точно; используйте это по умолчанию, но я думаю, что вы всегда должны предлагать выбор, даже если он скрыт в меню настроек.
  • 2
    @LiamNewmarch Я также большой поклонник догадок и подсказок пользователям, вместо того, чтобы принимать предпочтения пользователей и блокировать их. Иногда я хочу использовать настольный сайт на своем iPad. Обычно я хочу использовать английскую версию сайта, независимо от того, где проклятая база данных IP-to-Geo говорит, что я в данный момент географически расположен! у вас есть мой upvote, сэр.
Показать ещё 11 комментариев
71

Я знаю, что это ужасное решение, но на данный момент единственный способ разделить iPad Mini и iPad 2 - проверить его номер сборки и сопоставить каждый номер сборки с соответствующим устройством.

Позвольте мне привести пример: iPad mini, версия 6.0, раскрывает "10A406" как номер сборки, в то время как iPad 2 разоблачает "10A5376e".

Это значение можно легко получить с помощью регулярного выражения в пользовательском агенте (window.navigator.userAgent); это число имеет префикс "Mobile/".

К сожалению, это единственный недвусмысленный способ обнаружения iPad Mini; Я бы предложил принять подход, связанный с viewport (где поддерживается, используя модули vh/vw), чтобы правильно отображать содержимое на разных размерах экрана.

  • 5
    Номер сборки действительно является ключевым, но я заметил, что номер сборки может отличаться в зависимости от страны, в которой было приобретено устройство. Например, в Греции номер сборки iPad 2 выглядит как 10A403 вместо 10A5376e, который я также видел из США iPad 2's. Я предполагаю, что номер сборки для мини также может отличаться.
  • 67
    Это решение неверно. Для некоторого контекста: «номер сборки» описывает операционную систему, а не аппаратное обеспечение. Теперь, если бы разные устройства всегда имели разные сборки ОС, это было бы хорошо, но это было верно только в прошлом для первого выпуска ОС, который шел с каждым новым устройством. В данном случае 10A406 - это номер сборки для 6.0 для iPad Mini, а 10A403 - это номер сборки для 6.0 для iPad 2 ( не 10A5376e, который был 6.0 beta 4). Однако номер сборки 6.0.1 на обоих уже 10A523, поэтому текущая сборка уже идентична, и будущие сборки будут продолжаться.
Показать ещё 5 комментариев
66

tl; dr Не компенсируйте разницу между iPad mini и iPad 2, если вы не компенсируете между жирными и тощими пальцами.

Apple, похоже, намеренно пытается не дать вам сказать разницу. Apple, похоже, не хочет, чтобы мы писали другой код для разных версий iPads. Не будучи частью Apple сам, я не знаю этого точно, я просто говорю, что это то, что кажется. Возможно, если сообщество разработчиков придумает фантастический детектор для iPad mini, Apple может намеренно сломать этот детектор в будущих версиях iOS. Apple хочет, чтобы вы установили минимальный целевой размер в 44 точки iOS, и iOS отобразит это в двух размерах, более крупном размере iPad и меньшем размере мини-iPhone/iPad. 44 пункта - это много щедрых, и ваши пользователи наверняка узнают, находятся ли они на более мелком iPad, поэтому могут самостоятельно компенсировать.

Я предлагаю вам вернуться к заявленной причине для запроса детектора: настройка размера цели для удобства конечного пользователя. Принимая решение о дизайне для одного размера на большом iPad и другом размере на маленьком iPad, вы решаете, что у всех людей одинаковые пальцы. Если ваш дизайн достаточно плотный, что разница в размере от iPad 2 и iPad mini имеет значение, размер пальцев между мной и моей женой будет иметь большее значение. Так что компенсируйте размер пальца пользователя, а не модель iPad.

У меня есть предложение о том, как измерить размер пальца. Я - родной разработчик iOS, поэтому я не знаю, можно ли это сделать в HTML5, но вот как я бы измерил размер пальца в родном приложении. Я бы попросил пользователя сжать два объекта вместе, а затем измерить, насколько они близки друг к другу. Меньшие пальцы сближают объекты, и вы можете использовать это измерение для получения коэффициента масштабирования. Это автоматически настраивается для размера iPad. У одного и того же человека будет большее измерение на экранных точках на iPad mini, чем на iPad 2. Для игры вы можете назвать этот шаг калибровки или даже не вызвать его. Представьте это как начальный шаг. Например, в игре для стрельбы игрок помещает боеприпасы в пистолет с защемлением.

  • 1
    Этот первый абзац является правильным ответом. Рекомендованный размер цели 44 очка - отлично.
  • 0
    Чувак, если бы у меня была еще тысяча голосов. Первый абзац действительно, ты выиграл интернет.
27

Попросите пользователя сбросить iPad с нескольких тысяч футов над землей. Затем используйте внутренний акселерометр, чтобы измерить время, необходимое iPad для достижения конечной скорости. Более крупный iPad имеет больший коэффициент сопротивления и должен достичь конечной скорости за меньшее время, чем iPad Mini.

Вот пример кода для начала работы.

function isIPadMini( var timeToReachTerminalVelocity )
{
    return (timeToReachTerminalVelocity > IPAD_MINI_THRESHOLD);
}

Вам почти наверняка придется пересмотреть этот код, когда Apple неизбежно выпускает следующий iPad в другом форм-факторе. Но я уверен, что вы останетесь на вершине вещей и сохраните этот взлом для каждой новой версии iPad.

  • 0
    Разве это не должно быть «больше времени, чем iPad mini»?
  • 1
    Хорошая линия мысли Галилея применительно к современной проблеме .... Интересно, что будет дальше ..
Показать ещё 1 комментарий
27

К сожалению, на данный момент похоже, что это невозможно: http://www.mobilexweb.com/blog/ipad-mini-detection-for-html5-user-agent

Два дня назад я написал твиттер о первой обнаруженной проблеме: " Это что iPad Mini User Agent совпадает с iPad 2. Ive получил буквально сотни ответов, говорящих, что пользовательский агент обнюхивание - это плохая практика, что мы должны обнаруживать устройства и т.д. и т.д.

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

  • 8
    @ net.uk.sweet - Тогда почему бы вам не отредактировать ответ и не исправить ошибки? И между прочим, английский в цитируемом тексте выглядит не так уж плохо.
  • 0
    @shi откуда ты можешь знать, что автор этого цитируемого текста - итальянец? Я не носитель английского языка. лол
Показать ещё 3 комментария
25

Это дикий выстрел, но одна из отличий между iPad 2 и iPad mini заключается в том, что у первого нет 3-осевого гироскопа. Возможно, будет возможно использовать API ориентации устройства WebKit, чтобы узнать, какую информацию вы можете получить от него.

Например, эта страница кажется, что вы можете получить только значение rotationRate, если устройство имеет гироскоп.

Извините, я не могу дать рабочий POC - у меня нет доступа к iPad mini. Может быть, кто-то, кто знает немного больше об этих API ориентации, может прослушивать здесь.

  • 3
    Так, на сайте Apple гироскоп на iPad 2 не описывается как «3-осевой» гироскоп; но когда они говорят «гироскоп», они имеют в виду особый вид детали (такой, что разработчики приложений, разрабатывающие игры, требующие этой части благодаря возможности гироскопа, могут быть уверены, что она есть и будет работать для них). Если вы выполните поиск в Google по запросу «3-осевой гироскоп» «iPad 2», вы обнаружите множество статей в конце 2010 и начале 2011 года, в которых говорится о том, как ожидается, что iPad 2 получит ту же 3-осевую часть гироскопа, что и iPad. iPhone 4 уже был: когда он вышел, мы не были разочарованы;
  • 0
    На этом я основал свое предложение: apple.com/ipad/ipad-2/specs.html В нем не упоминается ни один гироскоп. Только «акселерометр». Учитывая это, и тот факт, что их документы, похоже, предполагают, что некоторые устройства поддерживают только подмножество API-интерфейсов движения, стоит попробовать. Я бы, если бы у меня был iPad mini ...
Показать ещё 2 комментария
21

Ну, iPad 2 и iPad Mini имеют батареи разных размеров.

Если iOS 6 поддерживает его, вы можете получить текущий уровень заряда батареи от 0.0..1.0 с помощью window.navigator.webkitBattery.level. На некотором уровне либо в аппаратном, либо в программном обеспечении, который, скорее всего, рассчитывается как CurrentLevel / TotalLevel, где оба являются int. Если это так, это приведет к поплавке, кратное значению 1 / TotalLevel. Если вы берете большое количество показаний уровня заряда батареи с обоих устройств и вычисляете battery.level * n, вы можете найти значение n, где все результаты начнут близки к целым числам, что даст вам iPad2TotalLevel и iPadMiniTotalLevel.

Если эти два числа отличаются друг от друга и взаимно первичны, то в процессе производства вы можете рассчитать battery.level * iPad2TotalLevel и battery.level * iPadMiniTotalLevel. Какое бы ни было ближе к целому числу, будет указано, какое устройство используется.

Извините за количество ifs в этом ответе! Надеюсь, что-то лучше придет.

18

РЕДАКТИРОВАТЬ 1: Мой первоначальный ответ, ниже, был "не делай этого". В интересах быть позитивным:

Реальный вопрос, я думаю, не имеет ничего общего с iPad X против iPad mini. Я думаю, что это касается оптимизации размеров и размещения элементов пользовательского интерфейса для эргономики пользователя. Вам необходимо определить размер пальца пользователя, чтобы управлять размером элемента пользовательского интерфейса и, возможно, позиционированием. Это, опять же, должно быть и должно быть, вероятно, достигнуто без необходимости действительно знать, на каком устройстве вы работаете. Позвольте преувеличивать: ваше приложение работает на 40-дюймовом диагональном экране. Не знаю марку и модель или DPI. Как вы оцениваете элементы управления?

Вам нужно отобразить кнопку, которая является элементом стробирования, в сайт/игру. Я оставлю это для вас, чтобы решить, где и как это имеет смысл сделать это.

Пока пользователь увидит это как одну кнопку, на самом деле он будет состоять из матрицы небольших плотно упакованных кнопок, которые визуально будут отображаться как однократное изображение кнопки. Представьте себе кнопку размером 100 x 100 пикселей, состоящую из 400 кнопок, каждая 5 x 5 пикселей. Вам нужно поэкспериментировать, чтобы понять, что здесь имеет смысл и насколько небольшая ваша выборка должна быть.

Возможный CSS для массива кнопок:

.sense_row {
  width:100px;
  height:5px;
  margin:0;
  padding:0;
}

.sense_button {
  float:left;
  width:3px;
  height:3px;
  padding:0px;
  margin:0px;
  background-color:#FF0;
  border:1px solid #000;
} 

И получившийся массив:

Изображение 5025

Когда пользователь прикасается к массиву кнопок, вы, фактически, получите изображение области контакта пальца пользователя. Затем вы можете использовать любые критерии, которые вы хотите (вероятно, эмпирически полученные), чтобы получить набор чисел, которые вы можете использовать для масштабирования и размещения различных элементов пользовательского интерфейса в соответствии с вашими требованиями.

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

Я бы предположил, что эта кнопка sense_array может быть скрыта как часть процесса входа в приложение. Например, если это игра, может быть, есть кнопка "Play" или различные кнопки с именами пользователей или средство выбора уровня, на котором они будут играть, и т.д. Вы получаете идею. Кнопка sense_array может жить в любом месте, где пользователь должен коснуться, чтобы попасть в игру.

РЕДАКТИРОВАТЬ 2: Просто отметим, что вам, вероятно, не нужно, чтобы многие сенсорные кнопки. Набор концентрических кругов или кнопок, расположенных как огромная звездочка *, может отлично справиться. Вы должны экспериментировать.

С моим старым ответом, ниже, я даю вам обе стороны монеты.

OLD ANSWER:

Правильный ответ: не делайте этого. Это плохая идея.

Если ваши кнопки настолько малы, что они становятся непригодными на мини, вам нужно сделать ваши кнопки большими.

Если я вообще что-то узнал о том, что я использую собственные приложения для iOS, это попытка перехитрить Apple - это формула для чрезмерной боли и обострения. Если они решили не позволять вам идентифицировать устройство, потому что, ну, в их песочнице вы не должны.

Интересно, настраиваете ли вы размер/расположение в портрете или пейзаж?

  • 0
    Подожди, ты прочитал вопрос? «определенные элементы регулируются по размеру относительно положения большого пальца или пальца пользователя»
  • 0
    Мой вопрос был о том, настраивает ли OP элементы на основе портретной / альбомной ориентации. Веб-браузеры будут автоматически подстраиваться под дополнительную ширину ландшафта и отображать весь контент больше портретного. Я просто пытаюсь указать на то, что - если вы не заблокируете все - почти нет способа оптимизировать для каждого возможного устройства, ориентации и пользователя, если вы не пишете нативное приложение для iOS. Даже тогда вы можете быть осторожны с выбором, который вы делаете. Может ли это быть сделано из веб-приложения и JavaScript? Наверное. Я просто не думаю, что это хорошая идея.
Показать ещё 4 комментария
11

Как насчет микро-теста, вычислите что-то, что занимает примерно X микросекунды на iPad 2 и Y sec на iPad mini.

Это, вероятно, недостаточно точно, но может быть какая-то инструкция, что мини-чип iPad более эффективен.

11

Да, это хороший момент для проверки гироскопа. Вы можете легко сделать это с помощью

http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/DeviceMotionEventClassRef/DeviceMotionEvent/DeviceMotionEvent.html

или что-то вроде

window.ondevicemotion = function(event) {
if (navigator.platform.indexOf("iPad") != -1 && window.devicePixelRatio == 1) {
    var version = "";
    if (event.acceleration) version = "iPad2";
    else version="iPad Mini";

    alert(version);

}
window.ondevicemotion = null;

}

У вас нет iPad для тестирования.

  • 12
    Это решение не работает (протестировано на iPad Mini и iPad 2: оба идентифицируются как «iPad2»), так как 1) функция event.acceleration предназначена для работы, если на устройстве установлен модный гироскоп или более старый акселерометр и 2) согласно веб-сайту Apple, и iPad Mini, и iPad 2 имеют причудливую часть гироскопа, так что концепция этой проверки не сработала бы в первую очередь.
  • 0
    @ JayFreeman-saurik- Это настоящий саурик?
8

Требовать от всех пользователей пользовательского агента iPad2 фото с помощью встроенной камеры и определить разрешение с помощью API файлов HTML. iPad Mini будет иметь более высокое разрешение благодаря усовершенствованиям камеры.

Вы также можете поиграть с созданием невидимого элемента canvas и преобразовать его в PNG/JPG с помощью Canvas API. У меня нет возможности проверить его, но результирующие биты могут отличаться из-за основного алгоритма сжатия и плотности пикселей устройства.

7

Вы всегда можете спросить пользователя!

Если пользователь не может видеть кнопки или содержимое, дайте им способ управлять самим масштабированием. Вы всегда можете создать несколько кнопок масштабирования на сайте, чтобы сделать контент (текст/кнопки) больше/меньше. Это будет (почти) гарантировано работать для любого текущего разрешения iPad и, возможно, любого будущего решения Apple, решение, которое они хотят сделать.

6

Это не ответ на ваш вопрос, как поставленный, но я надеюсь, что это будет более полезно, чем сказать "не делай этого":

Вместо того, чтобы обнаруживать iPad Mini, почему бы не обнаружить, что пользователь с трудом ударяет по элементу управления (или: последовательно попадает в субрегион элемента управления) и увеличивает/уменьшает размер элемента управления для их размещения

Пользователи, которым нужны большие элементы управления, получают их независимо от оборудования; пользователи, которым не нужны более крупные элементы управления и хотят увидеть больше контента, тоже получат это. Это не просто, как просто определение аппаратного обеспечения, и будут некоторые тонкие вещи, чтобы получить право, но если бы это было сделано тщательно, это могло бы быть очень приятно.

5

Все решения здесь не являются надежными для будущего (что мешает Apple выпускать iPad с таким же размером экрана, как iPad 2, но с тем же разрешением, что и iPad Mini). Поэтому я придумал идею:

Создайте div с шириной 1 дюйм и добавьте его в тело. Затем я создаю еще один div со 100% шириной и добавлю его в тело:

var div1= $("<div/>").appendTo(document.body).width("1in");
var div2= $("<div/>").appendTo(document.body).width("100%");

Функция jQuery width() всегда возвращает значения в пикселях, поэтому вы можете просто:

var screenSize= div2.width() / div1.width();

screenSize теперь имеет размер , доступный для приложения в дюймах (будьте осторожны с закруглением erros). Вы можете использовать это, чтобы разместить свой графический интерфейс так, как вам нравится. Также не забудьте удалить бесполезные divs впоследствии.

Также обратите внимание, что алгоритм, предложенный Kaspars, не только не будет работать, если пользователь запустит приложение как полный экран, но он также сломается, если Apple заплатит пользовательский интерфейс браузера.

Это не будет отличать устройства, но, как вы объяснили в своем редактировании, вы действительно хотите знать размер экрана устройства. Моя идея также не скажет вам точно размер экрана, но это даст вам еще более полезную информацию, фактический размер (в дюймах), который у вас есть, чтобы нарисовать свой графический интерфейс.

EDIT: Используйте этот код, чтобы проверить, действительно ли он работает на вашем устройстве. Я не владею iPad, чтобы проверить его.

var div1= $("<div/>").appendTo(document.body).width("1in").height("1in").css("position", "absolute");
var div2= $("<div/>").appendTo(document.body).width("100%").height("100%").css("position", "absolute");
var width= div2.width() / div1.width()
var height= div2.height() / div1.height()
alert(Math.sqrt(width*width + height*height));

Должно появиться окно с вашим экраном в дюймах. Кажется, он работает на моем ноутбуке, возвращаясь 15.49, в то время как мой экран ноутбука продается как 15.4 ''. Может ли кто-нибудь проверить это на iPad и отправить комментарии, пожалуйста? Не забудьте запустить его на весь экран.

EDIT2: Оказалось, что страница, на которой я тестировал ее, имела несколько противоречивых CSS. Теперь я исправил тестовый код. Вам нужна позиция: абсолютная на div, поэтому вы можете использовать высоту в%.

EDIT3: Я провел некоторое исследование, и кажется, что нет способа фактически получить размер экрана на любом устройстве. Это не то, что OS может знать. Когда вы используете блок реального мира в CSS, это на самом деле просто оценка, основанная на некоторых свойствах вашего экрана. Излишне говорить, что это не совсем точно.

  • 0
    Вы проверяли это? Действительно ли 1 дюйм - это один и тот же физический 1 дюйм на Mini и iPad? Вполне возможно, что 1-дюймовый на Mini только показывает как 1/2 дюйма.
  • 0
    @KernelJames, эй, проверь мои изменения
Показать ещё 9 комментариев
5

Это напоминает мне цитату из фильма Равновесие:

"Что, скажете вы, самый простой способ получить оружие от клирика Грамматона?"

"Вы просите его об этом".

Мы так привыкли бороться за решения, когда иногда бывает лучше спросить. (Есть веские причины, по которым мы обычно этого не делаем, но это всегда вариант.) Все предложения здесь блестящие, но простым решением может быть ваша программа спросить, какой iPad они используют, когда они ее запускают.

Я знаю, что это своего рода нахальный ответ, но я надеюсь, что это напоминание о том, что нам не нужно бороться за все. (Я приготовил себя для downvotes.: P)

Некоторые примеры:

  • Обнаружение клавиатуры во время установки ОС иногда не может обнаружить специфической клавиатуры, поэтому установщик должен спросить.
  • Windows спрашивает, сеть, к которой вы подключаетесь, - это домашняя сеть или общедоступная сеть.
  • Компьютеры не могут обнаружить человека, который собирается его использовать, поэтому им требуются имя пользователя и пароль.

Желаем удачи - надеюсь, вы найдете потрясающее решение! Если вы этого не сделаете, не забывайте об этом.

  • 0
    Это может быть не то, о чем могли бы знать не технические пользователи.
5

Не отвечая на вопрос, но вопрос, стоящий за вопросом:

Ваша цель - улучшить работу пользователя на меньшем экране. Внешний вид элементов управления пользовательского интерфейса является его частью. Другая часть UX - это то, как приложение реагирует.

Что делать, если вы создадите область, которая реагирует на краны, достаточно большие, чтобы быть удобными на iPad Mini, сохраняя при этом визуальное представление элементов управления пользовательского интерфейса достаточно маленьким, чтобы наглядно видеть iPad?

Если вы собрали достаточное количество кранов, которые не были в визуальной области, вы можете решить визуально масштабировать элементы управления пользовательским интерфейсом.

В качестве бонуса это работает и для больших рук на iPad.

2

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

Этот размер текста может использоваться для формирования пользовательского интерфейса правдоподобных измерений, например. для кнопки (проверено на iPad Mini Retina, чтобы отреагировать на изменение размера текста):

padding: 0.5em 1em 0.5em 1em;
font: -apple-system-body;    

(образец кнопки CSS, благодаря jsfiddle и cssbuttongenerator)

2

Что делать, если вы создали кучу 1 "x1" широких div и добавили их один за другим в родительский div, пока ограничительная рамка не перескочила с 1 дюйма до 2 дюймов? Дюйм на мини-таком же размере, как дюйм на iPad, правильно?

  • 1
    Я попробовал это, но на мини "дюйм" меньше, чем "дюйм" на обычном iPad. Так что этот способ не сработает.
2

На основе Douglas вопроса о new webkitAudioContext().destination.numberOfChannels на iPad 2 я решил запустить несколько тестов.

Проверка numberOfChannels вернула 2 на iPad mini, но ничего не было на iPad 2 с iOS 5 и 2, а также с iOS 6.

Затем я попытался проверить, доступен ли webkitAudioContext

var hasWebkitAudio = typeof(webkitAudioContext) === "object";
alert(hasWebkitAudio);​

То же самое здесь iPad Mini и iPad 2 с iOS 6 возвращает true, а iPad 2 с iOS 5 возвращает false.

(Этот тест не работает на рабочем столе, для настольных компьютеров проверяет, есть ли функция webkitAudioContext).

Вот код, который вы можете попробовать: http://jsfiddle.net/sqFbc/

2

Не тестировался, но вместо воспроизведения аудиофайла и проверки баланса он мог работать, чтобы слушать микрофон, извлекать фоновый шум и вычислять его "цвет" (частотный график). Если у IPad Mini есть другая модель микрофона, чем у IPad 2, то их цвет фона должен быть значительно отличающимся, а некоторые звуковые методы отпечатков пальцев могут помочь вам определить, какое устройство используется.

Я не считаю, что это может быть осуществимо и стоит хлопот в этом конкретном случае, но я думаю, что отпечаток фонового шума может быть использован в некоторых приложениях, например, чтобы рассказать вам, где вы когда вы находитесь внутри здания.

1

Я обнаруживаю iPad mini, создавая холст который больше, чем iPad mini, может отображать, заполняя пиксель, а затем считывая цвет назад. IPad mini читает цвет как "000000". все остальное передает его как цвет заливки.

Частичный код:

function rgbToHex(r, g, b) {
    if (r > 255 || g > 255 || b > 255)
        throw "Invalid color component";
    return ((r << 16) | (g << 8) | b).toString(16);
}
var test_colour = '8ed6ff';
working_context.fillStyle = '#' + test_colour;
working_context.fillRect(0,0,1,1);
var colour_data = working_context.getImageData(0, 0, 1, 1).data;
var colour_hex = ("000000" + rgbToHex(colour_data[0], colour_data[1], colour_data[2])).slice(-6);

Мне нужно это для определения размера холста, чтобы оно обнаруживало функцию в моем случае использования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню