Обнаружение iPhone 3G или 3GS (и iPod touch 2G против iPod touch 3G) в JavaScript
Кто-нибудь знает способ обнаружения старого набора устройств:
- iPod touch 1G
- iPhone 2G
- iPhone 3G
- iPod touch 2G
Из нового набора:
- iPhone 3GS
- iPod touch 3G
- IPad
- iPhone 4
Я нашел методы для обнаружения iPhone 4 и iPad (используя размер экрана). Однако есть ли способ сказать iPhone 3GS и iPod touch 3G от iPod touch 1G и iPhone 2G?
Требования:
- Быть взломанным - все в порядке! Просто убедитесь, что он работает/все/время.
- Тестирование производительности/недостаточно/достаточно точное: но если вы можете заставить его работать 100% времени, это будет хорошо.
(Пример для обнаружения iPhone 2G и iPod touch 1G с использованием "скрытого" метода: "iPad и iPhone 3G и более поздняя версия поддержки H.264 Baseline 3.1. Более ранние версии поддержки iPhone H.264 Baseline profile 3.0". от http://developer.apple.com/safari/library/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/AudioandVideoTagBasics/AudioandVideoTagBasics.html).
Изменить: я не могу обойти это требование: альтернативы этому решению нет.
Ответы
Ответ 1
Если хруст числа будет дискриминатором... используйте его! Просто сравните небольшой цикл (назовите его BogoMips), и через 0,5 секунды вы знаете, что вы делаете.
Определены аппаратное и программное обеспечение, нагрузка в значительной степени определена (ну.. многозадачность iOS 4?), поэтому я думаю, что это может быть очень точно.
изменить Теперь я читаю ваши комментарии об испытании производительности; возможно, вы имели в виду именно это, возможно, вы хотели измерить время визуализации страницы. Мое предложение состоит в том, чтобы иметь страницу только с куском javascript, который затем сохраняет результат как cookie и перенаправляет. Практически известны все обстоятельства.
Ответ 2
Вы заглянули в строку UserAgent?
Например, мой iPhone 4 возвращает:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A306 Safari/6531.22.7
Mobile/8A306
- это версия прошивки (просто google для 8a306 iphone
Я считаю, что более старые версии телефонов не могут запускать новые версии ОС. Таким образом, вы можете найти набор кодов прошивки, которые будут отображаться только в более старых версиях телефонов. Это, по крайней мере, позволит вам обнаружить некоторые различия.
WURFL содержит некоторые полезные ссылки и строки пользовательских агентов и как определить устройство и возможности на его основе. Существует список для просмотра, и они могут правильно определить устройства. У меня нет доступа к более старому оборудованию, поэтому я не могу подтвердить, что он работает все время. Вы можете изучить, что показывает ваше устройство, используя: http://www.tera-wurfl.com/explore/ И посмотреть на различные строки UserAgent, приведенные обратно.
Ответ 3
Маленький бенчмарк, который определяет старые модели. Бенчмарк занимает 5-30 мс, поэтому нет реальной проблемы.
function runBenchmark(){
var time,
init = new Date(),
iterations = 5000;
while (iterations--) {
Math.sqrt(iterations*Math.random());
}
time = new Date - init;
return time;
}
function detectIphoneSpeed () {
if (runBenchmark()<15) {
return "3gs";
} else {
return "3g";
}
}
var iphoneSpeed = detectIphoneSpeed();