1 var X_Script_VBS_ENABLED = X_UA[ 'Windows' ] && !X_UA[ 'WinCE' ] && !X_UA[ 'WinPhone' ] && X_UA[ 'IE' ] < 11,
\r
2 // 構文のサポート instanceof, in(for-in ではない), try-catch. JS version 1.5以上
\r
3 X_Script_gte15 = !( X_UA[ 'IE' ] < 5.5 ) && ( new Function( 'f,a', 'try{return f.apply({},a)}catch(e){}' ) );
\r
6 * js バージョン間の差異を可能な限り吸収する
\r
7 * @namespace X.Script
\r
13 'tryIfSafe' : X_Script_try,
\r
16 * Visual Basic Script が使えるか?
\r
17 * @alias X.Script.VBS
\r
20 'VBS' : X_Script_VBS_ENABLED
\r
21 // git, strict mode, asm.js,
\r
24 if( X_Script_VBS_ENABLED ){
\r
26 X_Script_gte15 || document.write( '<script type=text/vbscript>' +
\r
28 'Function vbs_testAXO(v)',
\r
29 'On Error Resume Next',
\r
30 'Set ax = CreateObject(v)',
\r
31 'If Err.Number Then',
\r
38 'Function vbs_try(jsFunc,a1,a2,a3,a4)',
\r
39 'On Error Resume Next',
\r
40 'Set rs = jsFunc(a1,a2,a3,a4)',
\r
41 'If Err.Number != 0 Then',
\r
48 // elementID .SRC = v
\r
49 'Function vbs_setValue(id,k,v)',
\r
50 'On Error Resume Next',
\r
52 'Document.all[id][k]=v',
\r
53 'If Err.Number != 0 Then',
\r
63 ].join( '\n' ) + '</script>' );
\r
65 // http://space.geocities.jp/nequomame/others/excelvba/excelvba_01_03.html
\r
66 // Document.ActiveElement に安全に触れるか?確認
\r
67 // そういえば error は iframe 内で起きていた
\r
68 // http://stackoverflow.com/questions/14378224/document-activeelement-in-iframe-shows-unspecified-error-in-ie-standards-mode
\r
69 // document.activeElement in iframe shows unspecified error in IE standards mode
\r
70 X_Script_gte15 || document.write( '<script type=text/vbscript>' +
\r
72 'Function vbs_testAE()',
\r
73 'On Error Resume Next',
\r
74 'Set ae = Document.ActiveElement',
\r
75 'If Err.Number Then',
\r
81 ].join( '\n' ) + '</script>' );
\r
83 // TODO Object のメンバを辿る vba
\r
84 // byte Array を扱う vba
\r
88 * try-catch 構文が使えて安全に実行できるなら、コードを実行する
\r
89 * @alias X.Script.tryIfSafe
\r
90 * @param {funciton} func
\r
91 * @param {array=} 引数の入った配列
\r
93 function X_Script_try( func, args ){
\r
94 if( !X_Script_gte15 ){
\r
95 //return func.apply( {}, args );
\r
96 // window.onerror = return true を設定
\r
100 return X_Script_gte15( func, args || [] );
\r
103 function X_Script_createActiveXObjectSafty( name ){
\r
104 if( !X_Script_gte15 ){
\r
105 if( X_Script_VBS_ENABLED ){
\r
106 // console.log( window[ 'vbs_testAXO' ]( name ) + ' ' + name );
\r
107 return !window[ 'vbs_testAXO' ]( name ) && X_Script_createActiveXObject( name );
\r
109 return X_Script_createActiveXObject( name );
\r
112 return X_Script_try( X_Script_createActiveXObject, [ name ] );
\r
115 // TODO GeckoActiveX
\r
116 function X_Script_createActiveXObject( name ){
\r
117 return new ActiveXObject( name );
\r
121 * http://archiva.jp/web/html-css/ie6_background_flickr.html
\r
122 * hover時の背景画像ちらつきに対処する
\r
123 * この問題はIE6固有の問題であり、他のモダンブラウザやIE5等では発現しない。
\r
125 if( X_UA[ 'IE6' ] && // error @ NN7.2
\r
126 !X_Script_try( function(){ document.execCommand( 'BackgroundImageCache', false, true ); return 1; } ) ){
\r
128 * ie6 のみで実行する document.execCommand( 'BackgroundImageCache', false, true ) の失敗。
\r
129 * bonus: hotfix for IE6 SP1 (bug KB823727)
\r
130 * multipleIEs IE6 standalone 版では不可, IE5.5 は可,,,
\r
131 * @alias X.UA.ieExeComError */
\r
132 X_UA[ 'ieExeComError' ] = true;
\r