\r
-/*\r
- * UA\r
- */\r
-X.UA = (function( n, undefined ){\r
+// ------------------------------------------------------------------------- //\r
+// ------------ local variables -------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+var X_UA = (function( n, undefined ){\r
var acme = {},\r
dua = n.userAgent,\r
dav = n.appVersion,\r
tv = parseFloat(dav),\r
- i, j, v;\r
+ tridentToVer, i, j, v;\r
\r
console.log( ' userAgent : ' + dua );\r
console.log( '-' );\r
// Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\r
if( document.all || dav.indexOf( 'Trident/' ) !== -1 ){\r
acme.ActiveX = !!window[ 'ActiveXObject' ];\r
- acme.IE = document.documentMode || parseFloat(dua.split('MSIE ')[1]) || parseFloat(dua.split('rv:')[1]) || parseFloat(dav.split('MSIE ')[1]) || 0;\r
+ acme._IE = parseFloat(dua.split('MSIE ')[1]) || parseFloat(dua.split('rv:')[1]) || parseFloat(dav.split('MSIE ')[1]) || 0;\r
+ // IE11 の互換モードの dav にも Trident/7.0 が書かれているため互換モードか?判定ができる\r
+ // 互換モードでは Silverlight でエラーが出る?\r
+ acme.Trident = parseFloat(dav.split('Trident/')[1]) || 0;\r
+ acme.IE = document.documentMode || acme._IE;\r
+ tridentToVer = acme.Trident ? ( acme.Trident + 4 | 0 ) : acme._IE;\r
+ acme.IECompat = /* acme.IE !== acme._IE || */ tridentToVer !== acme._IE && tridentToVer;\r
acme.IE4 = acme.IE && acme.IE < 5;\r
acme.IE5678 = 5 <= acme.IE && acme.IE < 9;\r
acme.IE5 = 5 <= acme.IE && acme.IE < 5.5;\r
acme.IE55 = 5.5 <= acme.IE && acme.IE < 6;\r
+ acme.IE5x = acme.IE5 || acme.IE55;\r
acme.IE6 = 6 <= acme.IE && acme.IE < 7;\r
acme.IE7 = 7 <= acme.IE && acme.IE < 8;\r
acme.IE8 = 8 <= acme.IE && acme.IE < 9;\r
dua.indexOf( 'EBRD' ) !== -1; \r
\r
return acme;\r
-})( navigator );\r
+})( navigator ),\r
+\r
+X_UA_DOM = {},\r
+X_UA_EVENT = {},\r
+X_UA_HID = {};\r
+X_UA.IECompat && alert( X_UA.IE + ' ' + X_UA._IE + ' Tri:' + X_UA.Trident );\r
\r
-//alert(X.UA.Safari + ' ' + X.UA.WebKit + '\n\n' + navigator.userAgent + '\n\n' + navigator.appVersion + '\n\n' + navigator.platform );\r
+/*\r
+ * http://d.hatena.ne.jp/t-uchima/20051003/p1\r
+ * MacIEにはattachEventが一応あるけどwindow.attachEventとdocument.attachEventしかなく他の要素にはattachEventはない。\r
+ */\r
+\r
+if( X_UA.IE4 && X_UA.IE < 5 ){ // ie4 & iemobi4 & macie4.x\r
+ X_UA_DOM.IE4 = true;\r
+ X_UA_EVENT.IE4 = true;\r
+} else\r
+if( X_UA.MacIE ){\r
+ X_UA_DOM.W3C = true;\r
+ X_UA_EVENT.IE = true;\r
+} else\r
+if( document.getElementById ){\r
+ X_UA_DOM.W3C = true;\r
+ if( document.addEventListener ){\r
+ X_UA_EVENT.W3C = true;\r
+ } else\r
+ if( document.attachEvent ){\r
+ X_UA_EVENT.IE = true;\r
+ } else {\r
+ X_UA_EVENT.DOM0 = true;\r
+ };\r
+} else\r
+if( document.layers ){\r
+ \r
+} else {\r
+ \r
+};\r
+\r
+if( navigator.msPointerEnabled || navigator.pointerEnabled ) X_UA_HID.POINTER = true;\r
+if( !X_UA_HID.POINTER && window.ontouchstart !== undefined ) X_UA_HID.TOUCH = true;\r
+\r
+//alert(X_UA.Safari + ' ' + X_UA.WebKit + '\n\n' + navigator.userAgent + '\n\n' + navigator.appVersion + '\n\n' + navigator.platform );\r
\r
// Safari 3.1 未満は開発コンソールがない!\r
// http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
/*\r
-if( X.UA.Safari && X.UA.WebKit < 525.13 ){ \r
+if( X_UA.Safari && X_UA.WebKit < 525.13 ){ \r
window.onerror = function( x, y, z ){\r
var n = String.fromCharCode( 10 );\r
alert('window.onerrorによるエラーの捕捉:' + n + x + n + y + 'の' + z + '行目付近です。');\r
};\r
};*/\r
\r
-if( X.UA.IE < 7 ){ // error @ NN7.2\r
+// ------------------------------------------------------------------------- //\r
+// --- interface ----------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+X.UA = X_UA;\r
+\r
+\r
+\r
+if( X_UA.IE < 7 ){ // error @ NN7.2\r
// bonus: hotfix for IE6 SP1 (bug KB823727)\r
- // multipleIEs IE6 standalone 版では不可\r
- document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
+ // multipleIEs IE6 standalone 版では不可, IE5.5 は可,,,\r
+ X_UA.IE4 || X.UA.MacIE ?\r
+ document.execCommand && document.execCommand( 'BackgroundImageCache', false, true ) :\r
+ (function(){\r
+ X_UA.IE_EXECOM_ERROR = eval( 'var a=1;try{document.execCommand&&document.execCommand("BackgroundImageCache",!1,!0)}catch(e){a=0}!a' );\r
+ })();\r
+ \r
+ X_UA.IE_EXECOM_ERROR && alert( 'document.execCommand error!' );\r
};\r
-\r
-X.inObject = X.UA.IE < 5.5 ? // TODO JScript で判定\r
- (function( name, obj ){\r
- var p;\r
- if( obj[ name ] ) return true;\r
- name += ''; // 数値も許可\r
- for( p in obj ){\r
- if( p === name ) return true;\r
- };\r
- return false;\r
- }) :\r
- new Function( 'a,b', 'return a in b' );// なぜか ie5 でもerror\r