$(window).uxAgent();
userAgent 체크 항목: 아래 버튼을 클릭하세요
userAgent 기본:
$(window).uxAgent();
userAgent 전체:
$(window).uxAgent("full");
userAgent 기본
browser.os: mac, win, linux
browser: chrome, firefox, opera, safari, ie
browser.webkit: webkit
browser.ie8: ie8
browser.mobile: mobile, desktop
browser.ios: ios, android
userAgent 전체 (기본체크 + old 버전 체크)
support.transition: transition, notransition
support.transform: transform, notransform
support.backgroundsize: backgroundsize, nobackgroundsize
support.rgba: rgba, norgba
support.svgimage: svg, nosvg
support.pointerevents: pointerevents, nopointerevents
support.opacity: opacity, noopacity
/**********************
* JS Root
**********************/
var ua = navigator.userAgent, //user agent 체크 기타 모듈에서 쓸 수 있도록 전역처리
ie = ua.match(/(?:msie ([0-9]+)|rv:([0-9\.]+)\) like gecko)/i), //ie 버전 체크. (MSIE 7,7 ~10. ie11 : rv:11.0) like Gecko,,11.0)
prefix = ['Webkit', 'Moz', 'O'], // 접두사 설정
transition = 'transition',
transform = 'transform',
requestanimationframe = 'requestAnimationFrame', //requestanimationframe : 스크립트 기반 애니메이션용 타이밍 컨트롤. (https://msdn.microsoft.com/ko-kr/library/windows/apps/hh920765.aspx)
cancelanimationframe = 'CancelAnimationFrame',
transforms = {
translate3d: 'translate3d(0px, 0px, 0px)',
translate: 'translate(0px, 0px)',
scale3d: 'scale3d(1, 1, 1)',
scale: 'scale(1, 1)'
},
browser = $.browser, //1.8.x 버전까지 사용. (이후 버전은 jquery-migrate.min.js 추가 후 사용가능)
isTouch = ('ontouchstart' in window),//터치 여부
isMobile = ('orientation' in window) || isTouch === true,//모바일여부
support = $.support,
version, i, div;
/**********************
* $.fn.uxAgent
**********************/
$.fn.uxAgent = function(opt){//#################### 1.uxAgent ####################
var div = document.createElement('div');
if (!browser) {// $.browser 지원이 안되면 객체로 생성?
$.browser = browser = {};
}
// test 값 true,false 값 적용
browser.local = !(/^http:\/\//).test(location.href);
browser.firefox = (/firefox/i).test(ua);
browser.webkit = (/applewebkit/i).test(ua);
browser.chrome = (/chrome/i).test(ua);
browser.opera = (/opera/i).test(ua);
browser.ios = (/ip(ad|hone|od)/i).test(ua);
browser.android = (/android/i).test(ua);
browser.safari = browser.webkit && !browser.chrome;
// 터치가능여부 체크
support.touch = browser.ios || browser.android || (document.ontouchstart !== undefined && document.ontouchstart !== null);
browser.mobile = support.touch && ( browser.ios || browser.android );
// browser flase 값 삭제
for (i in browser) {
if (!browser[i]) {
delete browser[i];
}
}
// os check
browser.os = (navigator.appVersion).match(/(mac|win|linux)/i);
browser.os = (browser.os)? browser.os[1].toLowerCase() : '';
// ios, android version check
if (browser.ios || browser.android) {
version = ua.match(/applewebkit\/([0-9.]+)/i);
if (version && version.length > 1) {
browser.webkitversion = version[1];
}
if (browser.ios) {
version = ua.match(/version\/([0-9.]+)/i);
if (version && version.length > 1) {
browser.ios = version[1];
}
}else if (browser.android) {
version = ua.match(/android ([0-9.]+)/i);
if (version && version.length > 1) {
browser.android = parseInt(version[1].replace(/\./g, ''));
}
}
}
// ie 추가
support.svgimage = true;
support.pointerevents = true;
// ie version check 및 svgimage, poiterevents 재설정
if (ie){
browser.ie = ie = parseInt(ie[1] || ie[2]);
if (9 > ie) {
browser.oldie = true;
} else if (9 == ie){
prefix.push('ms');
}
if (11 > ie){
support.pointerevents = false;
}
if (9 > ie){
support.svgimage = false;
}
}
// window.history.pushState(data, title [, url ] ) https://www.w3.org/TR/2011/WD-html5-20110113/history.html#dom-history-pushstate
support.pushstate = !!history.pushState;
support.mediaquery = typeof(window.matchMedia) == 'function' || !browser.oldie;
// placeholder 지원여부
var ip_test2 = document.createElement('input'),
ie_ph = ('placeholder' in ip_test2);
// media.canPlayType(type) 재생여부 판단하여 불가능:'', 가능:maybe or probably 반환. ie8은 undefinded
support.video = document.createElement('video').canPlayType !== undefined;
/*
$.fn.decideClass = function(classname, condition) {
return this[condition ? 'addClass' : 'removeClass'](classname);
}*/
support.awse = {
// ie8
isPoorBrowser : $.browser.ie && 9 > $.browser.ie,
swipeAble : !!(!!$.browser.mobile || window.PointerEvent || window.MSPointerEvent),
// mobile:flase, pc(ie9이하)제외: transition
parallaxAble : !($.browser.ie && 9 > $.browser.ie) && !$.browser.mobile && $.support.transition,
// 초기화
initialized : false
}// console.log(support.awse.swipeAble)
$(document.documentElement)
.addClass(browser.os)
.addClass(browser.chrome ? 'chrome' : browser.firefox ? 'firefox' : browser.opera ? 'opera' : browser.safari ? 'safari' : browser.ie ? 'ie ie'+browser.ie : '')
.addClass(browser.webkit ? 'webkit' : '')
.addClass(browser.ie && 8 > browser.ie ? 'ie8' : '')
.addClass(browser.mobile ? 'mobile' : 'desktop')
.addClass(browser.ios ? 'ios' : browser.android ? 'android' : '');
if(opt=="full"){
// css3 check
support.backgroundsize = 'backgroundSize' in div.style;
if ( support.backgroundsize ) {
div.style.backgroundSize = 'cover';
support.backgroundsize = div.style.backgroundSize == 'cover';
}
try {
div.style.background = 'rgba(0, 0, 0, 0)';
support.rgba = div.style.background == 'rgba(0, 0, 0, 0)';
} catch(e) {
support.rgba = false;
}
support.canvas = document.createElement('canvas');
support.canvas = support.canvas.getContext && support.canvas.getContext('2d');
// transform check : 지원여부에 따라 접두사 추가
if (div.style[transform] != undefined) {
support.transform = transform;
} else {
transform = 'Transform';
for (i = 0; i < 4; i++) {
if (div.style[prefix[i]+transform] !== undefined) {
support.transform = prefix[i]+transform;
break;
}
}
}
if (support.transform) {
transform = support.transform;
for (i in transforms) {
div.style[transform] = '';
div.style[transform] = transforms[i];
support[i] = div.style[transform];
}
/* if (browser.ie && 10 > browser.ie) { }
if ( browser.android && 430 > browser.android ) { }*/
}
// transition check : 지원여부에 따라 접두사 추가
if ( div.style[transition] != undefined ) {
support.transition = transition;
} else {
transition = 'Transition';
for (i = 0; i < 4; i++) {
if (div.style[prefix[i]+transition] !== undefined) {
support.transition = prefix[i]+transition;
break;
}
}
}
// requestanimationframe check : 지원여부에 따라 접두사 추가
if (window[requestanimationframe]) {
support.requestanimationframe = true;
} else {
requestanimationframe = 'RequestAnimationFrame';
for (i = 0; i < 4; i++) {
if (window[prefix[i]+requestanimationframe] !== undefined) {
window.requestAnimationFrame = window[prefix[i]+requestanimationframe];
window.cancelAnimationFrame = window[prefix[i]+cancelanimationframe];
support.requestanimationframe = true;
break;
}
}
}
// requestanimationframe 지원안하는 브라우저를 위한 function 생성
if (!support.requestanimationframe) {
window.requestAnimationFrame = (function() {
var lasttime = 0;
return function(callback) {
var currenttime = gettime(); // gettime() : 시간 값을 밀리초 단위
var timetocall = Math.max(0, 16-(currenttime-lasttime));
lasttime = currenttime+timetocall;
return setTimeout(function() { callback(currenttime+timetocall); }, timetocall);
}
})();
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
}
}
div = null;
$(document.documentElement)
.addClass(support.transition ? 'transition' : 'notransition')
.addClass(support.transform ? 'transform' : 'notransform')
.addClass(support.backgroundsize ? 'backgroundsize' : 'nobackgroundsize')
.addClass(support.rgba ? 'rgba' : 'norgba')
.addClass(support.svgimage ? 'svg' : 'nosvg')
.addClass(support.pointerevents ? 'pointerevents' : 'nopointerevents')
.addClass(support.opacity ? 'opacity' : 'noopacity');
}
if (!window.console) {
window.console = {};
window.scard.log.debug = window.console.table = window.console.error = window.console.clear = function() {};
}
if (opt=="full") {
console.log("Agent 체크: uxAgent('full');");
}else{
console.log("Agent 체크: uxAgent();");
}
};//####################// 1.uxAgent ####################