/**
* @파일 브라우저.js
* @모듈 브라우저
*/
import * as Dom from './dom';
'글로벌/창'에서 창 가져오기;
const USER_AGENT = 창.내비게이터 && window.navigator.userAgent || '';
const webkitVersionMap = (/AppleWebKit\/([\d.]+)/i).exec(USER_AGENT);
const appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;
/**
* 이 장치가 iPod인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_IPOD = (/iPod/i).test(USER_AGENT);
/**
* 감지된 iOS 버전 - 또는 `null`.
*
* @정적
* @const
* @type {문자열|널}
*/
내보내기 const IOS_VERSION = (함수() {
const 일치 = USER_AGENT.match(/OS (\d+)_/i);
만약 (일치 && 매치[1]) {
반환 일치 [1];
}
null을 반환합니다.
}());
/**
* Android 기기인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_ANDROID = (/Android/i).test(USER_AGENT);
/**
* 감지된 Android 버전 - 또는 `null`.
*
* @정적
* @const
* @type {숫자|문자열|null}
*/
내보내기 const ANDROID_VERSION = (함수() {
// 이것은 Android Major.Minor.Patch 버전과 일치합니다.
// ANDROID_VERSION은 숫자로 Major.Minor입니다. Minor가 없으면 Major만 반환됩니다.
const 일치 = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);
if (!일치) {
null을 반환합니다.
}
const major = 매치[1] && parseFloat(match[1]);
const 마이너 = 매치[2] && parseFloat(match[2]);
만약 (전공 && 미성년자) {
return parseFloat(match[1] + '.' + match[2]);
} 그렇지 않으면 (주요) {
전공 반환;
}
null을 반환합니다.
}());
/**
* 기본 Android 브라우저인지 여부.
*
* @정적
* @const
* @type {부울}
*/
수출 const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkit버전 < 537;
/**
* 이것이 Mozilla Firefox인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);
/**
* 이것이 Microsoft Edge인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_EDGE = (/Edg/i).test(USER_AGENT);
/**
* Google 크롬인지 여부.
*
* 이는 iOS의 Chrome에서도 'true'이며 다른 지원이 제공됩니다.
* 후드 아래에는 실제로 Safari가 있습니다.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_CHROME = !IS_EDGE && ((/Chrome/i).test(USER_AGENT) || (/CriOS/i).test(USER_AGENT));
/**
* 감지된 Google 크롬 버전 - 또는 `null`.
*
* @정적
* @const
* @type {숫자|null}
*/
내보내기 const CHROME_VERSION = (함수() {
const match = USER_AGENT.match(/(Chrome|CriOS)\/(\d+)/);
만약 (일치 && 매치[2]) {
return parseFloat(match[2]);
}
null을 반환합니다.
}());
/**
* 감지된 Internet Explorer 버전 - 또는 `null`.
*
* @정적
* @const
* @type {숫자|null}
*/
내보내기 const IE_VERSION = (함수() {
const result = (/MSIE\s(\d+)\.\d/).exec(USER_AGENT);
let 버전 = 결과 && parseFloat(result[1]);
if (! 버전 && (/Trident\/7.0/i).test(USER_AGENT) && (/rv:11.0/).테스트(USER_AGENT)) {
// IE 11에는 다른 IE 버전과 다른 사용자 에이전트 문자열이 있습니다.
버전 = 11.0;
}
반환 버전;
}());
/**
* 이것이 데스크탑 Safari인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_SAFARI = (/Safari/i).test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE;
/**
* 이것이 Windows 시스템인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_WINDOWS = (/Windows/i).test(USER_AGENT);
/**
* 이 장치가 터치 가능한지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const TOUCH_ENABLED = Boolean(Dom.isReal() && (
창에 'ontouchstart' ||
window.navigator.maxTouchPoints ||
window.DocumentTouch && window.document instanceof window.DocumentTouch));
/**
* 이 장치가 iPad인지 여부.
*
* @정적
* @const
* @type {부울}
*/
내보내기 const IS_IPAD = (/iPad/i).test(USER_AGENT) ||
(IS_사파리 && TOUCH_ENABLED && !(/iPhone/i).test(USER_AGENT));
/**
* 이 장치가 iPhone인지 여부.
*
* @정적
* @const
* @type {부울}
*/
// Facebook 앱의 UIWebView는 iPhone과 iPad로 식별되므로
// iPhone을 식별하려면 iPad를 제외해야 합니다.
// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/
내보내기 const IS_IPHONE = (/iPhone/i).test(USER_AGENT) && !IS_IPAD;
/**
* iOS 기기인지 여부.
*
* @정적
* @const
* @type {부울}
*/
수출 const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;
/**
* 이것이 iOS를 포함한 Safari의 풍미인지 여부.
*
* @정적
* @const
* @type {부울}
*/
수출 const IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME;