/** * 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>