/**
* Smartphone check Plugin
* User: Tenderfeel
* Date: 11/08/08
* LastModified: 11/09/28
* version:1.3.93
*
*/
(function($) {
/**
* jQuery function 'checkSmartphone'
* @param method {string|object|undefined}
*
* $(document.body).checkSmartphone({});
*/
$.fn.checkSmartphone = function(method) {
var ua = navigator.userAgent;
var OS = null;
var APPLE = false;
var ANDROID = false;
var WINDOWS = false;
var BROWSER_NAME = null;
var DEVICE_NAME = null;
var OS_VERSION = 0;
var BROWSER_VERSION = null;
var TABLET = false;
var SMARTPHONE = false;
var TOUCH = false;
var isOrientation = function() {
return (typeof window.orientation != 'undefined');
};
var isTouch = function() {
if (typeof TouchEvent != 'undefined') {
return true;
} else {
return false;
}
};
var _doAndroid = function() {
var m;
ANDROID = true;
OS = 'android';
TOUCH = isTouch();
if ($.browser.webkit) {
m = ua.match(/([\w]+)\s(\d\.\d(?:[^;]+)*); \w{2,3}\-\w{2,3};\s([^\/]+)\sBuild\/[^\)]*\).*Version\/([\d\.]+)\s([\w\s]*Safari)\/[\d\.]+/i);
/**
* m[1] OS Name
* m[2] OS Version
* m[3] Device name
* m[4] Browser Version
* m[5] Browser name
*/
OS = m[1];
OS_VERSION = m[2];
DEVICE_NAME = m[3].replace(/\s/ig, '');
BROWSER_NAME = m[5].replace(/\s/ig, '');
BROWSER_VERSION = m[4];
} else if ($.browser.opera) {
m = ua.match(/Opera\/9\.80 \((?:Android )*([^;]+);(\sLinux;)*\s([^\/]+)\/([^\/]+)[^;]*;\s\w+;\s([^\)]*)\).*Version\/([\d\.]+)/i);
/**
* m[1] OS Name
* m[2] OS Version
* m[3] Browser Name
* m[4] Browser Version(mini)
* m[5] lang
* m[6] Browser Version(mobi)
*/
OS = m[1];
OS_VERSION = m[2];
BROWSER_NAME = m[3].replace(/\s/ig, '');
if (BROWSER_NAME === 'OperaMobi') {
BROWSER_VERSION = m[6];
} else {
BROWSER_VERSION = m[4];
}
} else if ($.browser.mozilla) {
m = ua.match(/Mozilla\/[\d\.]+\s\(([^;]+);\s[^;\/]*;{0,1}[^;]*\)[;\s]*[^\s]+\s[^\s]+\sFennec\/([\d\.\w]+)/i);
var n = m[1].split('/');
OS = m[1];
BROWSER_NAME = 'Fennec';
BROWSER_VERSION = n[2];
}
if (isOrientation() || ua.match(/(?:Mobi(?:le)*|Fennec)/i)) {
SMARTPHONE = true;
} else {
TABLET = true;
}
};
var _doWin = function(){
var m;
WINDOWS = true;
OS = 'windows';
TOUCH = isTouch();
if ($.browser.ie) {
m = ua.match(/Mozilla\/[\d\.]+\s\(\w+;\sMSIE\s[\d\.]+;\s([^\d]+)\sOS\s([\d\.]+);\s.+IEMobile\/([\d\.]+)/i);
/**
* m[1] = os name
* m[2] = os version
* m[3] = browser version
*/
OS = m[1];
OS_VERSION = m[2];
BROWSER_NAME = 'IEMobile';
BROWSER_VERSION = m[3];
}
if (isOrientation() || ua.indexOf('Mobile') > -1) {
SMARTPHONE = true;
} else {
TABLET = true;
}
};
var _doApple = function() {
var m;
APPLE = true;
OS = 'apple';
TOUCH = isTouch();
if (isOrientation()) {
SMARTPHONE = true;
}
if(("standalone" in window.navigator) && !window.navigator.standalone){
if ($.browser.webkit) {
m = ua.match(/\((\w+); U;[\w\s]+? OS (\d_\d(?:_\d)*).*(?:Version\/([\d\.]+))*/i);
DEVICE_NAME = m[1];
OS_VERSION = m[2].replace(/_/g, '.');
if(m[3]){
BROWSER_VERSION = m[3];
}else{
BROWSER_VERSION = $.browser.version;
}
BROWSER_NAME = 'MobileSafari';
} else if ($.browser.opera) {
m = ua.match(/Opera\/9\.80 \(([^;]+);\s([^\/]+)\/([^\/]+)[^;]*;\s\w+;\s([^\)]*)\).*/i);
DEVICE_NAME = m[1];
BROWSER_NAME = m[2].replace(/\s/ig, '');
BROWSER_VERSION = m[3];
}
}else{
m = ua.match(/\((\w+); U;[\w\s]+? OS (\d_\d(?:_\d)*).*/i);
DEVICE_NAME = m[1];
OS_VERSION = m[2].replace(/_/g, '.');
BROWSER_VERSION = $.browser.version;
BROWSER_NAME = 'AppMode';
}
};
var publics = {
init: function(options) {
this.checkSmartphone.settings = $.extend({}, this.checkSmartphone.defaults, options);
var settings = this.checkSmartphone.settings;
var cn = [];
OS = 'pc';
if (!$.browser.agent) {
if (ua.indexOf('Android') !== -1) {
_doAndroid();
} else if (ua.indexOf('Windows Phone') !== -1) {
_doWin();
} else if (ua.indexOf('iPhone') !== -1 || ua.indexOf('iPad') !== -1 || ua.indexOf('iPod') !== -1) {
_doApple();
}
$.extend($.browser, {
'agent': {
'os': OS,
'apple': APPLE,
'android': ANDROID,
'device': DEVICE_NAME,
'browser_name': BROWSER_NAME,
'browser_version': BROWSER_VERSION,
'os_version': parseFloat(OS_VERSION),
'smartphone': SMARTPHONE,
'tablet': TABLET,
'touch': TOUCH
}
});
$.each(settings, function(key, val) {
if (val !== true) {
return;
}
switch (key) {
case 'smartphone':
if ($.browser.agent.smartphone) cn.push('smartphone');
break;
case 'tablet':
if ($.browser.agent.tablet) cn.push('tablet');
break;
case 'touch':
if ($.browser.agent.touch) cn.push('touch');
break;
case 'os_version':
if ($.browser.agent.os_version) {
if ($.browser.agent.device === 'iPhone' || $.browser.agent.device === 'iPad') {
cn.push($.browser.agent.device + String($.browser.agent.os_version).slice(0, 1));
}
cn.push('ov' + String($.browser.agent.os_version).replace(/\./g, '_'));
}
break;
case 'browser_version':
cn.push('bv' + String($.browser.agent.browser_version).replace(/\./g, '_'));
break;
default:
cn.push($.browser.agent[key]);
break;
}
});
}
return this.each(function() {
var $element = $(this),
element = this;
$element.addClass($.trim(cn.join(' ')));
});
}
};
$.extend({
getAgent: function(type) {
if (!$.browser.agent) return null;
if (type !== 'all' && typeof type === 'string') {
return $.browser.agent[type];
} else if (!type || type === 'all') {
var str = '';
var s = arguments[1] || ':';
var n = arguments[2] || '<br />';
$.each($.browser.agent, function(key, val) {
str += key + s + val + n;
});
return str;
}
}
});
if (publics[method]) {
return publics[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return publics.init.apply(this, arguments);
} else {
$.error(method + ' はcheckAgentプラグインに定義されていません');
}
};
$.fn.checkSmartphone.defaults = {
'os': true,
'device': true,
'browser_name': false,
'browser_version': false,
'os_version': false,
'smartphone': false,
'tablet': false,
'touch': true
};
$.fn.checkSmartphone.settings = {};
})(jQuery);
$(function() {
$('#ua').val(navigator.userAgent);
$.extend({
getAgent: function(type) {
if (!$.browser.agent) return null;
if (type !== 'all' && typeof type === 'string') {
return $.browser.agent[type];
} else if (!type || type === 'all') {
var str = '';
var s = arguments[1] || ':';
var n = arguments[2] || '<br />';
$.each($.browser.agent, function(key, val) {
str += key + s + val + n;
});
return str;
}
}
});
$(document.body).checkSmartphone();
$('#info').html($.getAgent());
});
<div><textarea id="ua" cols="50" rows="5"></textarea></div>
<div id="info"></div>