OSDN Git Service

Version 0.6.210, add Android browser PC mode detection.
authoritozyun <itozyun@user.sourceforge.jp>
Wed, 10 Feb 2016 07:56:24 +0000 (16:56 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Wed, 10 Feb 2016 07:56:24 +0000 (16:56 +0900)
0.6.x/js/01_core/02_XUA.js
0.6.x/js/01_core/07_XString.js
0.6.x/js/02_dom/20_XNode.js

index 73e7105..22a31f3 100644 (file)
@@ -17,7 +17,7 @@ var X_UA = X[ 'UA' ] = {},
                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
@@ -233,9 +233,8 @@ var X_UA = X[ 'UA' ] = {},
                 * @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
@@ -265,6 +264,30 @@ var X_UA = X[ 'UA' ] = {},
                         */\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
+                       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 ) :\r
+                               v < 534.3  ? (\r
+                                       !navigator[ 'connection' ] ? 4.4 :\r
+                                       document.execCommand && window.history && history.pushState ? 4.2/* & 4.3 */ : // ここに 4.1, 4.0 も入ってくる...\r
+                                       document.execCommand ? 4.1 :\r
+                                       window[ 'Int8Array' ] ? 4 : 3 ) : // 534 - 3.x~4.x , 534.13=3.x\r
+                               v < 535    ? 4.0 : // 534.30 = 4.0-4.1\r
+                               v < 536    ? 4.1 : // 535.19 = 4.1\r
+                               v < 538    ? 4.4 : 0;// 537.36 = 4.4.2-5.x\r
+                       if( v ){\r
+                               // PC版で見る、にチェックが付いている場合、ユーザーエージェント文字列にも platform にも Android の文字列が存在しない(標準ブラウザ&Chrome)\r
+                               // Audio でタッチが必要か?の判定にとても困る...\r
+                               X_UA[ 'Android' ]    = v;\r
+                       };\r
                };\r
        };\r
        \r
@@ -350,7 +373,7 @@ var X_UA = X[ 'UA' ] = {},
                         * @alias X.UA.EdgeMobile\r
                         * @type {number}\r
                         */\r
-                               X_UA[ 'EdgeMobile' ] = v;\r
+                       X_UA[ 'EdgeMobile' ] = v;\r
                };\r
 \r
        }  else\r
@@ -620,11 +643,11 @@ var X_UA = X[ 'UA' ] = {},
        } 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
index aa7d1f2..6f99ff2 100644 (file)
@@ -3,6 +3,33 @@
 // ------------ local variables -------------------------------------------- //\r
 // ------------------------------------------------------------------------- //\r
 var X_String_CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 );\r
+       X_String_CHAR_REFS = {"&iexcl;":161,"&cent;":162,"&pound;":163,"&curren;":164,"&yen;":165,"&brvbar;":166,"&sect;":167,"&uml;":168,"&copy;":169,\r
+"&ordf;":170,"&laquo;":171,\r
+"&not;":172,"&shy;":173,"&reg;":174,"&macr;":175,"&deg;":176,"&plusmn;":177,"&sup2;":178,"&sup3;":179,"&acute;":180,"&micro;":181,"&para;":182,\r
+"&middot;":183,"&cedil;":184,"&sup1;":185,"&ordm;":186,"&raquo;":187,"&frac14;":188,"&frac12;":189,"&frac34;":190,"&iquest;":191,"&Agrave;":192,\r
+"&Aacute;":193,"&Acirc;":194,"&Atilde;":195,"&Auml;":196,"&Aring;":197,"&AElig;":198,"&Ccedil;":199,"&Egrave;":200,"&Eacute;":201,"&Ecirc;":202,\r
+"&Euml;":203,"&Igrave;":204,"&Iacute;":205,"&Icirc;":206,"&Iuml;":207,"&ETH;":208,"&Ntilde;":209,"&Ograve;":210,"&Oacute;":211,"&Ocirc;":212,\r
+"&Otilde;":213,"&Ouml;":214,"&times;":215,"&Oslash;":216,"&Ugrave;":217,"&Uacute;":218,"&Ucirc;":219,"&Uuml;":220,"&Yacute;":221,"&THORN;":222,\r
+"&szlig;":223,"&agrave;":224,"&aacute;":225,"&acirc;":226,"&atilde;":227,"&auml;":228,"&aring;":229,"&aelig;":230,"&ccedil;":231,"&egrave;":232,\r
+"&eacute;":233,"&ecirc;":234,"&euml;":235,"&igrave;":236,"&iacute;":237,"&icirc;":238,"&iuml;":239,"&eth;":240,"&ntilde;":241,"&ograve;":242,\r
+"&oacute;":243,"&ocirc;":244,"&otilde;":245,"&ouml;":246,"&divide;":247,"&oslash;":248,"&ugrave;":249,"&uacute;":250,"&ucirc;":251,"&uuml;":252,\r
+"&yacute;":253,"&thorn;":254,"&yuml;":255,"&OElig;":338,"&oelig;":339,"&Scaron;":352,"&scaron;":353,"&Yuml;":376,"&circ;":710,"&tilde;":732,"&fnof;":402,\r
+"&Alpha;":913,"&Beta;":914,"&Gamma;":915,"&Delta;":916,"&Epsilon;":917,"&Zeta;":918,"&Eta;":919,"&Theta;":920,"&Iota;":921,"&Kappa;":922,"&Lambda;":923,\r
+"&Mu;":924,"&Nu;":925,"&Xi;":926,"&Omicron;":927,"&Pi;":928,"&Rho;":929,"&Sigma;":931,"&Tau;":932,"&Upsilon;":933,"&Phi;":934,"&Chi;":935,"&Psi;":936,\r
+"&Omega;":937,"&alpha;":945,"&beta;":946,"&gamma;":947,"&delta;":948,"&epsilon;":949,"&zeta;":950,"&eta;":951,"&theta;":952,"&iota;":953,"&kappa;":954,\r
+"&lambda;":955,"&mu;":956,"&nu;":957,"&xi;":958,"&omicron;":959,"&pi;":960,"&rho;":961,"&sigmaf;":962,"&sigma;":963,"&tau;":964,"&upsilon;":965,"&phi;":966,\r
+"&chi;":967,"&psi;":968,"&omega;":969,"&thetasym;":977,"&upsih;":978,"&piv;":982,"&ensp;":8194,"&emsp;":8195,"&thinsp;":8201,"&zwnj;":8204,"&zwj;":8205,\r
+"&lrm;":8206,"&rlm;":8207,"&ndash;":8211,"&mdash;":8212,"&lsquo;":8216,"&rsquo;":8217,"&sbquo;":8218,"&ldquo;":8220,"&rdquo;":8221,"&bdquo;":8222,\r
+"&dagger;":8224,"&Dagger;":8225,"&bull;":8226,"&hellip;":8230,"&permil;":8240,"&prime;":8242,"&Prime;":8243,"&lsaquo;":8249,"&rsaquo;":8250,"&oline;":8254,\r
+"&frasl;":8260,"&euro;":8364,"&image;":8465,"&ewierp;":8472,"&real;":8476,"&trade;":8482,"&alefsym;":8501,"&larr;":8592,"&uarr;":8593,"&rarr;":8594,\r
+"&darr;":8595,"&harr;":8596,"&crarr;":8629,"&lArr;":8656,"&uArr;":8657,"&rArr;":8658,"&dArr;":8659,"&hArr;":8660,"&forall;":8704,"&part;":8706,\r
+"&exist;":8707,"&empty;":8709,"&nabla;":8711,"&isin;":8712,"&notin;":8713,"&ni;":8715,"&prod;":8719,"&sum;":8721,"&minus;":8722,"&lowast;":8727,\r
+"&radic;":8730,"&prop;":8733,"&infin;":8734,"&ang;":8736,"&and;":8743,"&or;":8744,"&cap;":8745,"&cup;":8746,"&int;":8747,"&there4;":8756,"&sim;":8764,\r
+"&cong;":8773,"&asymp;":8776,"&ne;":8800,"&equiv;":8801,"&le;":8804,"&ge;":8805,\r
+"&sub;":8834,"&sup;":8835,"&nsub;":8836,"&sube;":8838,"&supe;":8839,"&oplus;":8853,"&otimes;":8855,"&perp;":8869,"&sdot;":8901,\r
+"&lceil;":8968,"&rceil;":8969,"&lfloor;":8970,"&rfloor;":8971,"&lang;":9001,"&rang;":9002,"&loz;":9674,"&spades;":9824,"&clubs;":9827,\r
+"&hearts;":9829,"&diams;":9830\r
+};\r
 \r
 // ------------------------------------------------------------------------- //\r
 // --- interface ----------------------------------------------------------- //\r
@@ -131,14 +158,26 @@ function X_String_whiteSpaceToTag( text ){
  * @return {string} html文字列\r
  */\r
 function X_String_chrReferanceTo( str ){\r
+       var refs, i, l, ref;\r
+       \r
     if( str == null || str === '' ) return '';\r
-    return str.toString()\r
+    if( str.indexOf( '&' ) === -1 ) return str;\r
+    \r
+    str = str.toString()\r
        .split( '&quot;' ).join( '"' )\r
        .split( '&apos;' ).join( "'" )\r
        .split( '&lt;'   ).join( '<' )\r
        .split( '&gt;'   ).join( '>' )\r
-       .split( '&nbsp;' ).join( ' ' )\r
-       .split( '&amp;'  ).join( '&' ); // last!\r
+       .split( '&nbsp;' ).join( ' ' );\r
+    \r
+    if( str.indexOf( '&' ) === -1 ) return str;\r
+    \r
+    refs = X_String_CHAR_REFS;\r
+    for( k in refs ){\r
+       str = str.split( k ).join( String.fromCharCode( refs[ k ] ) );\r
+    };\r
+  \r
+    return str.split( '&amp;'  ).join( '&' ); // last!\r
 };\r
 \r
 /**\r
index f09db3a..d80b855 100644 (file)
@@ -1110,7 +1110,7 @@ function X_Node_html( html ){
                if( !this[ '_tag' ] ) return this[ 'text' ]( html );
                
                this[ 'empty' ]();
-               if( html ){
+               if( html += '' ){
                        X_Node_append.apply( this, X_HtmlParser_parse( html, true ) );
                };
                return this;