* @type {object}\r
*/\r
var X_UA = X[ 'UA' ] = {},\r
- X_UA_classNameForHTML = 'js-enabled ';\r
+ X_UA_classNameForHTML = '';\r
\r
(function(){\r
var dua = navigator.userAgent,\r
dav = navigator.appVersion,\r
tv = parseFloat(dav),\r
sys = navigator.platform,\r
- tridentToVer, i, j, v;\r
+ tridentToVer, i, j, v, androidBrowserPCMode;\r
\r
console.log( ' userAgent : ' + dua );\r
console.log( '-' );\r
\r
if( sys.indexOf( 'iP' ) === 0 ){\r
\r
- v = dua.split( 'OS ' )[ 1 ].split( '_' );\r
+ v = dav.split( 'OS ' )[ 1 ].split( '_' );\r
i = window.devicePixelRatio === 1;\r
/**\r
* @alias X.UA.iOSMajor\r
* @alias X.UA.iOS\r
* @type {number}\r
*/\r
- X_UA[ 'iOS' ] = X_UA[ 'iOSMajor' ] + X_UA[ 'iOSMinor' ] / 10;\r
+ X_UA[ 'iOS' ] = X_UA[ 'iOSMajor' ] + X_UA[ 'iOSMinor' ] / 10;\r
\r
// 4:3 model\r
v = screen.width === screen.height * 1.5 || screen.width * 1.5 === screen.height;\r
- \r
- if( sys === 'iPhone' ){\r
- /**\r
- * @alias X.UA.iPhone\r
- * @type {boolean}\r
- */\r
- X_UA[ 'iPhone' ] = true;\r
- if( v ){\r
+\r
+ switch( sys ){\r
+ case 'iPhone' :\r
+ case 'iPhone Simulator' :\r
/**\r
- * iPhone4s以下\r
- * @alias X.UA.iPhone_4s\r
+ * @alias X.UA.iPhone\r
* @type {boolean}\r
*/\r
- X_UA[ 'iPhone_4s' ] = true;\r
- \r
- if( i ){\r
+ X_UA[ 'iPhone' ] = true;\r
+ if( v ){\r
/**\r
- * iPhone3GS以下\r
- * @alias X.UA.iPhone_3GS\r
+ * iPhone4s以下\r
+ * @alias X.UA.iPhone_4s\r
* @type {boolean}\r
*/\r
- X_UA[ 'iPhone_3GS' ] = true;\r
- }; \r
- };\r
-\r
- //alert( 'iPhone ' + ( X_UA[ 'iPhone_3GS' ] ? '3GS以下' : X_UA[ 'iPhone_4s' ] ? '4s以下' : '5以上' ) );\r
- };\r
- if( sys === 'iPad' ){\r
- /**\r
- * @alias X.UA.iPad\r
- * @type {boolean}\r
- */\r
- X_UA[ 'iPad' ] = true;\r
- if( i ){\r
+ X_UA[ 'iPhone_4s' ] = true;\r
+ \r
+ if( i ){\r
+ /**\r
+ * iPhone3GS以下\r
+ * @alias X.UA.iPhone_3GS\r
+ * @type {boolean}\r
+ */\r
+ X_UA[ 'iPhone_3GS' ] = true;\r
+ }; \r
+ };\r
+ break;\r
+ \r
+ case 'iPad' :\r
+ case 'iPad Simulator' :\r
/**\r
- * iPad2以下または初代iPad mini 以下\r
- * @alias X.UA.iPad_2Mini1\r
+ * @alias X.UA.iPad\r
* @type {boolean}\r
*/\r
- X_UA[ 'iPad_2Mini1' ] = true;\r
- };\r
- };\r
- if( sys === 'iPod' ){\r
- /**\r
- * @alias X.UA.iPod\r
- * @type {boolean}\r
- */\r
- X_UA[ 'iPod' ] = true;\r
-\r
- if( v ){\r
+ X_UA[ 'iPad' ] = true;\r
+ if( i ){\r
+ /**\r
+ * iPad2以下または初代iPad mini 以下\r
+ * @alias X.UA.iPad_2Mini1\r
+ * @type {boolean}\r
+ */\r
+ X_UA[ 'iPad_2Mini1' ] = true;\r
+ };\r
+ break;\r
+ \r
+ case 'iPod' :\r
+ case 'iPod Simulator' : // 必要??\r
/**\r
- * iPod4以下\r
- * @alias X.UA.iPod_4\r
+ * @alias X.UA.iPod\r
* @type {boolean}\r
*/\r
- X_UA[ 'iPod_4' ] = true;\r
- \r
- if( i ){\r
+ X_UA[ 'iPod' ] = true;\r
+ \r
+ if( v ){\r
/**\r
- * iPod3以下\r
- * @alias X.UA.iPod_3\r
+ * iPod4以下\r
+ * @alias X.UA.iPod_4\r
* @type {boolean}\r
*/\r
- X_UA[ 'iPod_3' ] = true;\r
- }; \r
- };\r
- //alert( 'iPod touch ' + ( X_UA[ 'iPod_3' ] ? '3以下' : X_UA[ 'iPod_4' ] ? '4以下' : '5以上' ) );\r
+ X_UA[ 'iPod_4' ] = true;\r
+ \r
+ if( i ){\r
+ /**\r
+ * iPod3以下\r
+ * @alias X.UA.iPod_3\r
+ * @type {boolean}\r
+ */\r
+ X_UA[ 'iPod_3' ] = true;\r
+ }; \r
+ };\r
+ break;\r
};\r
\r
console.log( '>> iOS : ' + X_UA[ 'iOS' ] );\r
* @alias X.UA.Linux\r
* @type {boolean}\r
*/\r
- X_UA[ 'Linux' ] = true;\r
-\r
- if( v = dua.split( 'Android ' )[ 1 ] ){\r
+ if( ( v = dua.split( 'Android ' )[ 1 ] ) ||\r
+ ( v = sys.split( 'Android ' )[ 1 ] ) ){ // PCモードの Android Firefox では platform に Android 0.0.0 が存在\r
v = v.split( '.' );\r
/**\r
* @alias X.UA.AndroidMajor\r
*/\r
X_UA[ 'Android' ] = X_UA[ 'AndroidMajor' ] + X_UA[ 'AndroidMinor' ] / 10;\r
console.log( '>> Android : ' + X_UA[ 'Android' ] );\r
+ } else\r
+ if( ( sys === 'Linux armv7l' || sys === 'Linux i686' ) && window.ontouchstart !== undefined && ( v = parseFloat( dua.split( 'WebKit\/' )[ 1 ] ) ) ){\r
+ // https://ja.wikipedia.org/wiki/WebKit\r
+ // http://www.au.kddi.com/developer/android/kishu/ua/\r
+ // webkit version to Android version...\r
+ androidBrowserPCMode = !window.chrome || v < 534.3; // 4.0 & 3.x には chrome がいる...\r
+ \r
+ if( !window[ 'Int8Array' ] ){\r
+ v =\r
+ v < 529 ? 1.5 : // <= 528.5\r
+ v < 531 ? 2.0 : // 530 2.0~2.1\r
+ // 533 2.2~2.3\r
+ v < 534 ? ( window.HTMLAudioElement ? 2.3 : 2.2 ) : 0;\r
+ } else {\r
+ v =\r
+ !navigator[ 'connection' ] ? 4.4 :\r
+ Number.isFinite && ( window.history && window.history.pushState ) ? 4.2/* & 4.3 */ : // ここに 4.1, 4.0 も入ってくる...\r
+ Number.isFinite ? 4.1 : 4;\r
+ // 534 - 3.x~4.x , 534.13=3.x\r
+ // 534.30 = 4.0-4.1\r
+ // 535.19 = 4.1\r
+ // 537.36 = 4.4.2-5.x\r
+ };\r
+\r
+ if( v ){\r
+ // PC版で見る、にチェックが付いている場合、ユーザーエージェント文字列にも platform にも Android の文字列が存在しない(標準ブラウザ&Chrome)\r
+ // Audio でタッチが必要か?の判定にとても困る...\r
+ // ua には Linux x86_64 になっている\r
+ X_UA[ 'Android' ] = v;\r
+ };\r
};\r
};\r
\r
*/\r
X_UA[ 'OperaTablet' ] = true;\r
\r
+ // Android Opera12.10 UserAgent:Desktop\r
+ // この場合 android version 不明...\r
+ if( !X_UA[ 'OperaMini' ] && !X_UA[ 'OperaTablet' ] && !X_UA[ 'OperaMobile' ] && sys === 'Android' ){\r
+ if( screen.width * screen.height < 320000 ){\r
+ X_UA[ 'OperaMobile' ] = true;\r
+ } else {\r
+ X_UA[ 'OperaTablet' ] = true;\r
+ };\r
+ };\r
+ \r
if( 0 < dua.indexOf( 'Nintendo Wii' ) )\r
/**\r
* @alias X.UA.Wii\r
* @alias X.UA.EdgeMobile\r
* @type {number}\r
*/\r
- X_UA[ 'EdgeMobile' ] = v;\r
+ X_UA[ 'EdgeMobile' ] = v;\r
};\r
\r
} else\r
X_UA[ 'MacIE' ] = true;\r
};\r
\r
- if( 0 < dua.toLowerCase().indexOf( 'iemobile' ) || X_UA[ 'WinCE' ] ){\r
+ if( 0 < dua.indexOf( 'IEMobile' ) || X_UA[ 'WinCE' ] ){\r
/**\r
* @alias X.UA.IEMobile\r
* @type {boolean}\r
X_UA[ 'IEMobile' ] = true;\r
};\r
\r
- if( 0 < dua.toLowerCase().indexOf( 'windows phone' ) || 0 < dav.indexOf( 'ZuneWP' ) ){\r
+ if( 0 < dua.indexOf( 'Windows Phone' ) || 0 < dav.indexOf( 'ZuneWP' ) ){\r
/**\r
* @alias X.UA.WinPhone\r
* @type {boolean}\r
} else\r
\r
// Android 標準ブラウザ AOSP と ChromeWeb View, Sブラウザがある\r
- if( ( v = X_UA[ 'Android' ] ) && ( dua.indexOf( 'Chrome\/' ) < 0 || 0 < dua.indexOf( 'Version\/' ) ) ){ // Chrome/ を含まない または Version/ を含む\r
+ if( ( v = X_UA[ 'Android' ] ) && ( dua.indexOf( 'Chrome\/' ) < 0 || 0 < dua.indexOf( 'Version\/' ) || androidBrowserPCMode ) ){ // Chrome/ を含まない または Version/ を含む\r
\r
/* if( window.chrome ){ // Android3.1 のAOSPブラウザで .chrome がいた、、、\r
} else */\r
- if( dua.indexOf( 'Version\/' ) < 0 && 0 < dua.indexOf( 'Chrome\/' ) ){\r
+ if( dua.indexOf( 'Version\/' ) < 0 && 0 < dua.indexOf( 'Chrome\/' ) && !androidBrowserPCMode ){\r
/**\r
* Android 標準ブラウザ Chrome WebView ブラウザ\r
* @alias X.UA.ChromeWV\r
*/\r
X_UA[ 'Safari' ] = v;\r
} else\r
- if( i <= 528.16 ){\r
- X_UA[ 'Safari' ] = i < 73 ? 0.8 :\r
- i < 85 ? 0.9 :\r
- i < 100 ? 1 :\r
- i < 125 ? 1.1 :\r
- i < 312 ? 1.2 :\r
- i < 412 ? 1.3 :\r
- i <= 419.3 ? 2 :\r
- i <= 525.13 ? 3 :\r
- i <= 525.25 ? 3.1 : 3.2;\r
+ if( v <= 528.16 ){\r
+ X_UA[ 'Safari' ] = v < 73 ? 0.8 :\r
+ v < 85 ? 0.9 :\r
+ v < 100 ? 1 :\r
+ v < 125 ? 1.1 :\r
+ v < 312 ? 1.2 :\r
+ v < 412 ? 1.3 :\r
+ v <= 419.3 ? 2 :\r
+ v <= 525.13 ? 3 :\r
+ v <= 525.25 ? 3.1 : 3.2;\r
};\r
}; \r
\r
for( k in X_UA ){\r
v = X_UA[ k ];\r
if( v ){\r
- X_UA_classNameForHTML += k + ' ';\r
if( v !== true ){\r
X_UA_classNameForHTML += k + v + ' ';\r
+ } else {\r
+ X_UA_classNameForHTML += k + ' ';\r
};\r
};\r
}; \r