X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2Fcore%2F01_XUa.js;h=7296b60a2c1abed6ecc93e5a5152305ba6c9acbd;hb=53149facb2f22305d34b9ac01803a6af433355d0;hp=5320fa791c896e7bdbefe33626ee20ef0321e837;hpb=274d0a6291860ae033cd637df296d4327b0fa38c;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/core/01_XUa.js b/0.6.x/js/core/01_XUa.js index 5320fa7..7296b60 100644 --- a/0.6.x/js/core/01_XUa.js +++ b/0.6.x/js/core/01_XUa.js @@ -1,30 +1,95 @@ + /* * UA */ -var X = X || {}; - -X.UA = (function(undefined){ +X.UA = (function( n, undefined ){ var acme = {}, - n = navigator, dua = n.userAgent, dav = n.appVersion, - tv = parseFloat(dav); - acme.Opera = ( dua.indexOf("Opera") >= 0 ) ? tv : undefined; - if(document.all && !acme.Opera){ + tv = parseFloat(dav), + i; + acme.Opera = ( 0 < dua.indexOf("Opera") ) ? tv : undefined; + acme.OperaMobile = ( 0 < dua.indexOf("Opera Mobi") ) ? tv : undefined; + + acme.IE = undefined; + if( document.all && !acme.Opera ){ acme.IE = parseFloat(dav.split("MSIE ")[1]) || undefined; return acme; - }; + }; + + // Blink + // Netfront + // iCab acme.Khtml = ( dav.indexOf("Konqueror") >= 0 ) ? tv : undefined; acme.WebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined; acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined; // replace( reg, ) don't work for Sigmarion2 pocketIE - acme.Gecko = eval( '(dua.indexOf("Gecko\/") >= 0) ? parseFloat(dua.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, "$1$2" )) : undefined' ); - var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); - if(index && !acme.Chrome){ - acme.Safari = parseFloat(dav.split("Version/")[1]); - if(!acme.Safari || parseFloat(dav.substr(index + 7)) <= 419.3){ + acme.Gecko = eval( '(navigator.userAgent.indexOf("Gecko\/") >= 0) ? parseFloat(navigator.userAgent.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, "$1$2" )) : undefined' ); + i = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if( i && !acme.Chrome ){ + acme.Safari = parseFloat( dav.split("Version/")[1] ); + i = parseFloat(dav.substr( i + 7 )); + if( !acme.Safari && i < 100 ){ + acme.Safari = 1; + }; + if( !acme.Safari && i < 125 ){ + acme.Safari = 1.1; + }; + if( !acme.Safari && i < 312 ){ + acme.Safari = 1.2; + }; + if( !acme.Safari && i < 412 ){ + acme.Safari = 1.3; + }; + if( !acme.Safari && i <= 419.3 ){ acme.Safari = 2; }; }; return acme; -})(); \ No newline at end of file +})( navigator ); + +X.UA.Android = navigator.userAgent.toLowerCase().indexOf( 'android' ) !== -1; +X.UA.iOS = navigator.userAgent.toLowerCase().indexOf( 'iphone' ) !== -1 || + navigator.userAgent.toLowerCase().indexOf( 'ipad' ) !== -1 || + navigator.userAgent.toLowerCase().indexOf( 'ipod' ) !== -1; +X.UA.IEMobile = navigator.userAgent.toLowerCase().indexOf( 'iemobile' ) !== -1 || + ( X.UA.IE && navigator.userAgent.toLowerCase().indexOf( 'windows phone' ) !== -1 ); +X.UA.TouchPad = navigator.userAgent.toLowerCase().indexOf( 'hp-tablet' ) !== -1; + +//http://www.useragentstring.com/pages/Iris/ +X.UA.Iris = navigator.userAgent.toLowerCase().indexOf( 'iris' ) !== -1; + +X.UA.EInk = + // Kobo Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/533.1 (KHTML, like Gecko) Verson/4.0 Mobile Safari/533.1 (Kobo Touch) + navigator.userAgent.indexOf( 'Kobo' ) !== -1 || + // Kindle paperwhite Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+ + navigator.userAgent.indexOf( 'Kindle' ) !== -1 || + // Sony Reader Mozilla/5.0 (Linux; U; ja-jp; EBRD1101; EXT) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 + navigator.userAgent.indexOf( 'EBRD' ) !== -1; + +if( X.UA.IE && X.UA.IE < 10 ) X.UA.ActiveX = !!window[ 'ActiveXObject' ]; + +X.inObject = X.UA.IE && X.UA.IE < 5 ? + (function( name, obj ){ + var p; + if( obj[ name ] ) return true; + name += ''; // 数値も許可 + for( p in obj ){ + if( p === name ) return true; + }; + return false; + }) : + new Function( 'a,b', 'return a in b' ); + + +// Safari 3.1 未満は開発コンソールがない! +// http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html +if( X.UA.Safari && X.UA.WebKit < 525.13 ){ + window.onerror = function( x, y, z ){ + var n = String.fromCharCode( 10 ); + alert('window.onerrorによるエラーの捕捉:' + n + x + n + y + 'の' + z + '行目付近です。'); + return true; + }; +}; + +