Detectando iOS
Eu não sou fã de cheirar o User Agent, mas eis como você faria isso:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Outra maneira é confiar navigator.platform
:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
será true
oufalse
Por que não o MSStream
A Microsoft injetou a palavra iPhone no IE11 userAgent
para tentar enganar o Gmail de alguma forma. Portanto, precisamos excluí-lo. Mais informações sobre isso aqui e aqui .
Abaixo está a atualização do IE11 userAgent
( Atualização do Internet Explorer para Windows Phone 8.1):
Mozilla / 5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv: 11.0; IEMobile / 11.0; NOKIA; Lumia 930) como iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, como Gecko) Mobile Safari / 537
Adicione facilmente mais dispositivos, sem usar expressões regulares:
function iOS() {
var iDevices = [
'iPad Simulator',
'iPhone Simulator',
'iPod Simulator',
'iPad',
'iPhone',
'iPod'
];
if (navigator.platform) {
while (iDevices.length) {
if (navigator.platform === iDevices.pop()){ return true; }
}
}
return false;
}
iOS()
será true
oufalse
Nota: Ambos navigator.userAgent
e navigator.platform
podem ser falsificados pelo usuário ou por uma extensão do navegador.
Detectando a versão do iOS
A maneira mais comum de detectar a versão do iOS é analisando-a na cadeia de caracteres do User Agent . Mas também há inferência de detecção de recursos * ;
Sabemos que um fato history API
foi introduzido no iOS4 - matchMedia API
no iOS5 - webAudio API
no iOS6 - WebSpeech API
no iOS7 e assim por diante.
Nota: O código a seguir não é confiável e será interrompido se algum desses recursos do HTML5 for descontinuado em uma versão mais recente do iOS. Você foi avisado!
function iOSversion() {
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
if (window.indexedDB) { return 'iOS 8 and up'; }
if (window.SpeechSynthesisUtterance) { return 'iOS 7'; }
if (window.webkitAudioContext) { return 'iOS 6'; }
if (window.matchMedia) { return 'iOS 5'; }
if (window.history && 'pushState' in window.history) { return 'iOS 4'; }
return 'iOS 3 or earlier';
}
return 'Not an iOS device';
}