OSDN Git Service

Version 0.6.172, bugfix...
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 21_XViewPort.js
index 2349dde..aa8cdc3 100644 (file)
@@ -1,6 +1,6 @@
 
 var X_ViewPort_readyState,
-       X_ViewPort_active = !!window.parent || !!document.activeElement, // parent は frameに読み込まれた場合のieのerror回避
+       X_ViewPort_active = ( window.parent === window ) || !window.parent, // parent は frameに読み込まれた場合のieのerror回避
        X_ViewPort_activeTimerID,
        X_ViewPort_rootElement,
        X_ViewPort_lock,
@@ -58,17 +58,19 @@ X_ViewPort = X_Class_override(
 
                                case 'visibilitychange' :
                                        console.log( e.type + ':' + document[ 'hidden' ] );
-                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'hidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
+                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = !document[ 'hidden' ] ) ? X_EVENT_VIEW_ACTIVATE : X_EVENT_VIEW_DEACTIVATE );
                                        break;
                                case 'msvisibilitychange' :
-                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'msHidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
+                                       console.log( e.type + ':' + document[ 'msHidden' ] );
+                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = !document[ 'msHidden' ] ) ? X_EVENT_VIEW_ACTIVATE : X_EVENT_VIEW_DEACTIVATE );
                                        break;
                                case 'mozvisibilitychange' :
-                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'mozHidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
+                                       console.log( e.type + ':' + document[ 'mozHidden' ] );
+                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = !document[ 'mozHidden' ] ) ? X_EVENT_VIEW_ACTIVATE : X_EVENT_VIEW_DEACTIVATE );
                                        break;
                                case 'webkitvisibilitychange' :
                                        console.log( e.type + ':' + document[ 'webkitHidden' ] );
-                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
+                                       X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = !document[ 'webkitHidden' ] ) ? X_EVENT_VIEW_ACTIVATE : X_EVENT_VIEW_DEACTIVATE );
                                        break;
        
                                case 'blur' :
@@ -76,7 +78,7 @@ X_ViewPort = X_Class_override(
                                        if( X_UA[ 'IE' ] < 9 ){
                                                xnode = X_Node_getXNode( document.activeElement );
                                                if( xnode ){
-                                                       xnode[ 'listen' ]( [ 'focus', 'blur' ], X_ViewPort_detectFocusForIE );
+                                                       xnode[ 'listenOnce' ]( [ 'focus', 'blur' ], X_ViewPort_detectFocusForIE );
                                                        //break;
                                                };
                                                if( X_ViewPort_activeTimerID ){
@@ -308,6 +310,22 @@ X[ 'ViewPort' ] = {
                        return X_ViewPort_baseFontSize = X_Node_fontSizeNode[ '_rawObject' ].offsetHeight;
                };
                return X_ViewPort_baseFontSize;
+       },
+       
+       /**
+        * キーボードイベントを受け付ける
+        * @alias X.ViewPort.isActive
+        */
+       'isActive' : function(){
+               return X_ViewPort_active;
+       },
+       
+       /**
+        * 可視である。iframe 内のhtmlも
+        * @alias X.ViewPort.isVisible
+        */
+       'isVisible' : function(){
+               return X_ViewPort_active;
        }
        
 };
@@ -573,21 +591,21 @@ console.log( 'X.Dom dom:w3c=' + X_UA_DOM.W3C + ' ev:w3c=' + X_UA_EVENT.W3C );
 if( X_UA_EVENT.W3C ){
        X_ViewPort_document[ 'listenOnce' ]( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
 } else
-if( 6 <= X_UA[ 'IE' ] && X[ 'inHead' ] ){
+if( 6 <= X_UA[ 'IE' ] && X[ 'inHead' ] && !X_UA[ 'ieExeComError' ] ){ // standalone の除外 ->  && !X_UA[ 'ieExeComError' ]
        // if this script in Head
-       //document.write( '<script id="__ie_onload" defer src="javascript:void(0)"></script>' );
-       //X_TEMP._script = document.getElementById( '__ie_onload' );
+       document.write( '<script id=__ieonload defer src=javascript:void(0)></script>' );
+       X_TEMP._script = document.getElementById( '__ieonload' );
        
        // 上のコードはスタンドアローン版ie6でエラー
-    X_TEMP._script = document.createElement( '<script id="__ie_onload" defer src="javascript:void(0)"></script>' ) ;
-    document.getElementsByTagName("head")[ 0 ].appendChild( X_TEMP._script );
+    //X_TEMP._script = document.createElement( '<script id=__ieonload defer src=javascript:void(0)></script>' ) ;
+    //document.getElementsByTagName( 'head' )[ 0 ].appendChild( X_TEMP._script );
     
        X_TEMP._script.onreadystatechange = function(){
                var s = X_TEMP._script;
                if( s && s.readyState === 'complete' ){
                        s.onreadystatechange = X_emptyFunction;
                        s.onreadystatechange = null;
-                       s.parentNode.removeChild( s );
+                       s.removeNode( true );
                        delete X_TEMP._script;
                        X_TEMP.onDomContentLoaded && X_TEMP.onDomContentLoaded();
                };