Подтвердить что ты не робот

Обнаружение 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).

Изменить: я не могу обойти это требование: альтернативы этому решению нет.

4b9b3361

Ответ 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();