X_Dom_detectFontSize = !( X_UA.IE < 9 || X_UA.iOS ) && function(){
var size = X_Node_fontSizeNode._rawObject.offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
- X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( { type : X.Event.BASE_FONT_RESIZED, fontSize : size, w : X_ViewPort_width, h : X_ViewPort_height } );
+ X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( X.Event.BASE_FONT_RESIZED );
X_ViewPort_baseFontSize = size;
};
},
},
X_ViewPort_document = new X.EventDispatcher( document ),
+
+ X_ViewPort_postMessageAccessKey = Math.random() * 10000 | 0,
X_ViewPort = X_Class_override(
new X.EventDispatcher( window ),
var href;
switch( e.type ){
case 'beforeunload' :
-
// ie では a href="javascript" な要素でも beforeunload が起こる
href = e.target && e.target.attr && e.target.attr( 'href' );
if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;
return X_ViewPort.dispatch( X.Event.BEFORE_UNLOAD );
+
case 'unload' :
X_ViewPort.dispatch( X.Event.UNLOAD );
+ //alert('unload');
+ X_ViewPort_document.kill();
+ this.kill();
- X_ViewPort.unlisten();
- X_ViewPort_document.unlisten();
- X_Node__actualRemove( X_Node_html, true );
+ //X_System.dispatch( X.Event.SHUT_DOWN );
break;
+
case 'visibilitychange' :
- X_ViewPort.dispatch( { type : ( X_ViewPort_active = document[ 'hidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE } );
+ X_ViewPort.asyncDispatch( ( X_ViewPort_active = document[ 'hidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE );
break;
case 'webkitvisibilitychange' :
- X_ViewPort.dispatch( { type : ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE } );
+ X_ViewPort.asyncDispatch( ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE );
break;
+
case 'pageshow' :
case 'focus' :
- X_ViewPort_active = true;
- X_ViewPort.dispatch( X.Event.VIEW_ACTIVATE );
+ if( !X_ViewPort_active ){
+ X_ViewPort_active = true;
+ X_ViewPort.asyncDispatch( X.Event.VIEW_ACTIVATE );
+ };
break;
+
case 'pagehide' :
case 'blur' :
- X_ViewPort_active = false;
- X_ViewPort.dispatch( X.Event.VIEW_DEACTIVATE );
+ if( X_ViewPort_active ){
+ X_ViewPort_active = false;
+ X_ViewPort.asyncDispatch( X.Event.VIEW_DEACTIVATE );
+ };
+ break;
+
+ // TODO
+ case 'message' :
+ if( e.origin !== X.URL.BASE_URL ){
+
+ } else {
+ e.data;
+ };
break;
};
}
/*
* X.Event.XDOM_READY 以後に listen した場合の対策
*/
- X_ViewPort.asyncDispatch( { type : type, w : X_ViewPort_width, h : X_ViewPort_height } );
+ X_ViewPort.asyncDispatch( type );
};
+ // ie8-では keydown -> documentへ
type && arg1 && X_ViewPort.listen( type, arg1, arg2, arg3 );
return X.ViewPort;
},
/*
* X.Event.XDOM_READY 以後に listen した場合の対策
*/
- X_ViewPort.asyncDispatch( { type : type, w : X_ViewPort_width, h : X_ViewPort_height } );
+ X_ViewPort.asyncDispatch( type );
};
type && arg1 && X_ViewPort.listenOnce( type, arg1, arg2, arg3 );
return X.ViewPort;
//http://onozaty.hatenablog.com/entry/20060803/p1
// Safari2.0.4では標準・互換どちらも document.body
- X_Node_body._updateTimerID && X_Node_startUpdate();
+ X_Node_updateTimerID && X_Node_startUpdate();
/*X_UA.Opera ?
( document.documentElement && document.documentElement.clientWidth ?
new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :
getScrollPosition :
window.pageXOffset !== undefined ?
( function(){
- X_Node_body._updateTimerID && X_Node_startUpdate();
+ X_Node_updateTimerID && X_Node_startUpdate();
return[ window.pageXOffset, window.pageYOffset ];
} ) :
window.scrollLeft !== undefined ?
( function(){
- X_Node_body._updateTimerID && X_Node_startUpdate();
+ X_Node_updateTimerID && X_Node_startUpdate();
return[ window.scrollLeft, window.scrollTop ];
} ) :
( function(){
- X_Node_body._updateTimerID && X_Node_startUpdate();
+ X_Node_updateTimerID && X_Node_startUpdate();
// body は Safari2-
return[ X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
} ),
},
getBaseFontSize : function(){
- if( X_Node_body._updateTimerID ){
+ if( X_Node_updateTimerID ){
X_Node_startUpdate();
return X_ViewPort_baseFontSize = X_Node_fontSizeNode._rawObject.offsetHeight;
};
size = X_Node_fontSizeNode._rawObject.offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
- X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( { type : X.Event.BASE_FONT_RESIZED, fontSize : size, w : X_ViewPort_width, h : X_ViewPort_height } );
+ X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( X.Event.BASE_FONT_RESIZED );
X_ViewPort_baseFontSize = size;
};
} else {
console.log( '-- detectFinishResizing : ' + X_Timer_now() );
- X_ViewPort.asyncDispatch( { type : X.Event.VIEW_RESIZED, fontSize : X_ViewPort_baseFontSize, w : X_ViewPort_width, h : X_ViewPort_height } );
+ X_ViewPort.asyncDispatch( X.Event.VIEW_RESIZED );
X_ViewPort_lock = false;
if( X_ViewPort_orientationFlag ){
X_ViewPort_orientationFlag = false;
//
if( X_Dom_orientationchange ){
- X_ViewPort.listen( 'orientationchange', X_Dom_orientationchange );
+ X_EventDispatcher_systemListen( X_ViewPort, 'orientationchange', X_Dom_orientationchange );
};
if( X_Dom_detectFontSize ){
- X_ViewPort.listen( 'resize', X_ViewPort_resize );
+ X_EventDispatcher_systemListen( X_ViewPort, 'resize', X_ViewPort_resize );
X.Timer.add( 333, X_Dom_detectFontSize );
} else {
X.Timer.add( 333, X_ViewPort_resize );
console.log( X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_PRE_INIT ) );
- X_ViewPort
- .listen( 'beforeunload', X_ViewPort )
- .listenOnce( 'unload', X_ViewPort );
+
+ X_EventDispatcher_systemListen( X_ViewPort, [ 'beforeunload', 'unload' ] );
//ブラウザの戻るボタンで戻ったときに呼ばれるイベントとかキャッシュとかそこらへんのこと
//http://d.hatena.ne.jp/koumiya/20080916/1221580149
if( document[ 'hidden' ] !== undefined ) {// iOS 7+
- X_ViewPort_document.listen( 'visibilitychange', X_ViewPort );
+ X_EventDispatcher_systemListen( X_ViewPort_document, 'visibilitychange', X_ViewPort );
} else
if( document[ 'webkitHidden' ] !== undefined ) {
- X_ViewPort_document.listen( 'webkitvisibilitychange', X_ViewPort );
+ X_EventDispatcher_systemListen( X_ViewPort_document, 'webkitvisibilitychange', X_ViewPort );
} else
if( X_UA.iOS && window[ 'onpageshow' ] !== undefined ) {
- X_ViewPort.listen( 'pageshow', X_ViewPort )
- .listen( 'pagehide', X_ViewPort );
+ X_EventDispatcher_systemListen( X_ViewPort, [ 'pageshow', 'pagehide' ] );
} else {
- X_ViewPort.listen( 'focus', X_ViewPort )
- .listen( 'blur', X_ViewPort );
+ X_EventDispatcher_systemListen( X_ViewPort, [ 'focus', 'blur' ] );
};
return X_Callback_UN_LISTEN;