Modernizr로 기능을 감지하는 방법과 비슷하게 브라우저가 iOS에서 실행 중인지 감지 할 수 있는지 궁금합니다 (기능 감지가 아닌 장치 감지 임에도 불구하고).
일반적으로 대신 기능 감지를 선호하지만이 질문에 따라 비디오를 처리하는 방식으로 인해 장치가 iOS인지 여부를 찾아야합니다. YouTube API는 iPad / iPhone / 비 플래시 장치에서 작동하지 않습니다.
답변
iOS 감지
나는 사용자 에이전트 스니핑 팬이 아니지만 다음과 같이하십시오.
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
다른 방법은 다음에 의존합니다 navigator.platform
.
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
것 중 하나 true
또는false
왜 MSStream이 아닌가
Microsoft 는 IE11에 iPhone 이라는 단어를 삽입하여 userAgent
어떻게 든 Gmail을 시도했습니다. 따라서 제외해야합니다. 여기 및 여기 에 대한 자세한 정보 .
아래는 IE11의 업데이트입니다 userAgent
(Windows Phone 8.1 용 Internet Explorer 업데이트).
iPhone OS와 같은 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) 7_0_3 Mac OS X AppleWebKit / 537 (Gecko와 같은 KHTML) 모바일 사파리 / 537
정규식을 사용하지 않고도 더 많은 장치를 쉽게 추가 할 수 있습니다.
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()
것 중 하나 true
또는false
주 : 둘 navigator.userAgent
과 navigator.platform
사용자 또는 브라우저 확장에 의해 위조 할 수 있습니다.
iOS 버전 감지
iOS 버전을 감지하는 가장 일반적인 방법은 User Agent 문자열에서 파싱하는 것입니다 . 그러나 또한이 기능 감지 추론 * ;
우리는 사실을 알고 history API
에 도입 된 iOS4 – matchMedia API
에 iOS5를 – webAudio API
에 iOS6의 – WebSpeech API
에 iOS7에 등등 ..
참고 : 다음 코드는 신뢰할 수 없으며 최신 HTML 버전에서 이러한 HTML5 기능이 더 이상 사용되지 않으면 중단됩니다. 경고를 받았습니다!
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';
}
답변
iOS 13 이후에는 다음과 같은 iOS 장치를 감지해야합니다. iPad는 오래된 방법으로 iOS 장치로 감지되지 않기 때문입니다 (기본적으로 활성화 된 새로운 “데스크톱”옵션으로 인해).
let isIOS = /iPad|iPhone|iPod/.test(navigator.platform)
|| (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)
데스크탑 모드가 비활성화 된 iOS <13 또는 iPhone 또는 iPad의 첫 번째 조건, 기본 구성의 iPadOS 13의 두 번째 조건은 Macintosh Intel처럼 위치하기 때문에 실제로는 멀티 터치가있는 유일한 Macintosh입니다.
실제 솔루션보다 해킹이 아니라 안정적으로 작동합니다.
PS 앞에서 언급했듯이 IE 점검을 추가해야 할 것입니다.
let isIOS = (/iPad|iPhone|iPod/.test(navigator.platform) ||
(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&
!window.MSStream
답변
변수 _iOSDevice
를 true 또는 false 로 설정합니다.
_iOSDevice = !!navigator.platform.match(/iPhone|iPod|iPad/);
답변
당신이 사용하는 경우 Modernizr 하는 경우 사용자 정의 테스트를 추가 할 수 있습니다.
어떤 탐지 모드를 사용하기로 결정했는지 (userAgent, navigator.vendor 또는 navigator.platform)는 중요하지 않으므로 나중에 쉽게 사용할 수 있도록 항상 마무리 할 수 있습니다.
//Add Modernizr test
Modernizr.addTest('isios', function() {
return navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
});
//usage
if (Modernizr.isios) {
//this adds ios class to body
Modernizr.prefixed('ios');
} else {
//this adds notios class to body
Modernizr.prefixed('notios');
}
답변
이 사용자 정의 Modernizr 테스트가 있습니다 : https://gist.github.com/855078
답변
간단하고 확장하기 쉬운 버전.
var iOS = ['iPad', 'iPhone', 'iPod'].indexOf(navigator.platform) >= 0;
답변
iOS 13을 실행하는 iPad가 (으)로 navigator.platform
설정되어 MacIntel
있으면 iPadOS 장치를 감지하는 다른 방법을 찾아야합니다.