OSDN Git Service
(root)
/
pettanr
/
clientJs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 0.6.221, Update the X.TextRange.
[pettanr/clientJs.git]
/
0.6.x
/
js
/
05_util
/
01_XNinjaIframe.js
diff --git
a/0.6.x/js/05_util/01_XNinjaIframe.js
b/0.6.x/js/05_util/01_XNinjaIframe.js
index
2eeaaa9
..
c0a77d1
100644
(file)
--- a/
0.6.x/js/05_util/01_XNinjaIframe.js
+++ b/
0.6.x/js/05_util/01_XNinjaIframe.js
@@
-1,27
+1,50
@@
-/*
\r
+/*
*
\r
* http://msdn.microsoft.com/ja-jp/library/ie/hh180174%28v=vs.85%29.aspx
\r
* 孤立するとウィンドウ オブジェクトのプロパティが消去される
\r
* http://msdn.microsoft.com/ja-jp/library/ie/hh180174%28v=vs.85%29.aspx
\r
* 孤立するとウィンドウ オブジェクトのプロパティが消去される
\r
+ *
\r
+ * http://qiita.com/sou/items/3380d4fa9b08b27bb387
\r
+ * モバイルブラウザでの iframe の挙動(Mobile Safari, Chrome for Android)
\r
+ *
\r
+ * @alias X.Util.NinjaIframe
\r
+ * @class NinjaIframe 隠し iframe 機能を提供します。
\r
+ * @extends {Node}
\r
*/
\r
*/
\r
-
\r
-// TODO Node.inherits
\r
-X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
\r
+var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
\r
'NinjaIframe',
\r
'NinjaIframe',
\r
+
\r
+ /** @lends NinjaIframe.prototype */
\r
{
\r
{
\r
- autoRefresh : 0,
\r
+ /* autoRefresh : 0, */
\r
\r
\r
+ /**
\r
+ * iframe の contentWindow
\r
+ * @private
\r
+ * @type {window} */
\r
_iwin : null,
\r
\r
_iwin : null,
\r
\r
+ /**
\r
+ * iframe に write する html 文字時列
\r
+ * @type {string} */
\r
_contentHTML : '',
\r
_contentHTML : '',
\r
+
\r
+ /**
\r
+ * iframe の name
\r
+ * @private
\r
+ * @type {string} */
\r
_name : '',
\r
_name : '',
\r
+
\r
+ /**
\r
+ * iframe への html 文字列の write が完了した
\r
+ * @private
\r
+ * @type {string} */
\r
_ready : false,
\r
\r
'Constructor' : function( html ){
\r
_ready : false,
\r
\r
'Constructor' : function( html ){
\r
+ // TODO src も設定可能に
\r
\r
this._name = 'hidden-iframe-' + X_Timer_now();
\r
// https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js
\r
\r
\r
this._name = 'hidden-iframe-' + X_Timer_now();
\r
// https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js
\r
\r
- X_Node_newByTag = true;
\r
-
\r
this[ 'Super' ](
\r
'IFRAME',
\r
{
\r
this[ 'Super' ](
\r
'IFRAME',
\r
{
\r
@@
-47,11
+70,17
@@
X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
\r
if( html ) this._contentHTML = html;
\r
\r
\r
if( html ) this._contentHTML = html;
\r
\r
- this[ 'appendTo' ]( X_Node_body /* X_Node_systemNode */ );
\r
+ this[ 'appendTo' ]( X_Node_systemNode )
\r
+ [ 'listenOnce' ]( X_EVENT_KILL_INSTANCE, X_Util_NinjaIframe_handleEvent );
\r
\r
X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );
\r
},
\r
\r
\r
X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );
\r
},
\r
\r
+ /**
\r
+ * iframe 内をリフレッシュ、または内容を上書きする
\r
+ * @param {string=} opt_contentHTML html文字列
\r
+ * @return {NinjaIframe} チェーンメソッド
\r
+ */
\r
'refresh' : function( opt_contentHTML ){
\r
var raw = this[ '_rawObject' ],
\r
idoc;
\r
'refresh' : function( opt_contentHTML ){
\r
var raw = this[ '_rawObject' ],
\r
idoc;
\r
@@
-69,18
+98,15
@@
X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
this._iwin.location.reload();
\r
};
\r
\r
this._iwin.location.reload();
\r
};
\r
\r
- if( !
opt_contentHTML
) return this;
\r
+ if( !
X_Type_isString( opt_contentHTML )
) return this;
\r
\r
this._contentHTML = opt_contentHTML;
\r
\r
this._contentHTML = opt_contentHTML;
\r
- X_UA[ 'IE' ] < 9 || X_Util_NinjaIframe_writeToIframe( this );
\r
+
\r
+ if( !( X_UA[ 'IE' ] < 9 ) ){
\r
+ X_Util_NinjaIframe_writeToIframe( this );
\r
+ };
\r
\r
return this;
\r
\r
return this;
\r
- },
\r
-
\r
- 'close' : function(){
\r
- X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );
\r
- this.call( 'close' );
\r
- this[ 'kill' ]();
\r
}
\r
\r
}
\r
}
\r
\r
}
\r
@@
-97,11
+123,10
@@
function X_Util_NinjaIframe_handleEvent( e ){
// こちらに名前をsetしないとtargetが動作しない
\r
if( X_UA[ 'IE' ] ) this._iwin.name = this._name;
\r
\r
// こちらに名前をsetしないとtargetが動作しない
\r
if( X_UA[ 'IE' ] ) this._iwin.name = this._name;
\r
\r
- this[ 'listen' ](
[ X_UA[ 'IE' ] < 9 ? 'readystatechange' : 'load', 'error' ], this
, X_Util_NinjaIframe_handleEvent );
\r
+ this[ 'listen' ](
X_UA[ 'IE' ] < 9 ? 'readystatechange' : [ 'load', 'error' ]
, X_Util_NinjaIframe_handleEvent );
\r
\r
if( !( X_UA[ 'IE' ] < 9 ) ){
\r
\r
if( !( X_UA[ 'IE' ] < 9 ) ){
\r
- this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );
\r
- this._ready = true;
\r
+ X_Util_NinjaIframe_writeToIframe( this );
\r
return;
\r
};
\r
//break; これあると IE8 で駄目!
\r
return;
\r
};
\r
//break; これあると IE8 で駄目!
\r
@@
-110,31
+135,35
@@
function X_Util_NinjaIframe_handleEvent( e ){
if( ( raw.readyState !== 'complete' && raw.readyState !== 'loaded' ) ) break;
\r
// ie9-
\r
if( !this._ready ){
\r
if( ( raw.readyState !== 'complete' && raw.readyState !== 'loaded' ) ) break;
\r
// ie9-
\r
if( !this._ready ){
\r
- this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );
\r
- this._ready = true;
\r
+ X_Util_NinjaIframe_writeToIframe( this );
\r
break;
\r
};
\r
// onload
\r
case 'load' :
\r
console.log( 'iframe load.' );
\r
break;
\r
};
\r
// onload
\r
case 'load' :
\r
console.log( 'iframe load.' );
\r
- this[ 'asyncDispatch' ](
X_EVENT_SUCCESS
);
\r
+ this[ 'asyncDispatch' ](
'ninjaload'
);
\r
break;
\r
\r
case 'error' :
\r
break;
\r
\r
case 'error' :
\r
- this[ 'asyncDispatch' ]( X_EVENT_ERROR );
\r
+ this[ 'asyncDispatch' ]( 'ninjaerror' );
\r
+ break;
\r
+
\r
+ case X_EVENT_KILL_INSTANCE :
\r
+ X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );
\r
+ this._iwin && this._iwin.close();
\r
break;
\r
};
\r
\r
break;
\r
};
\r
\r
- return X_C
allback
_STOP_PROPAGATION;
\r
+ return X_C
ALLBACK
_STOP_PROPAGATION;
\r
};
\r
\r
function X_Util_NinjaIframe_writeToIframe( that ){
\r
var raw = that[ '_rawObject' ],
\r
idoc = raw.contentDocument || that._iwin.document,
\r
html = that._contentHTML;
\r
};
\r
\r
function X_Util_NinjaIframe_writeToIframe( that ){
\r
var raw = that[ '_rawObject' ],
\r
idoc = raw.contentDocument || that._iwin.document,
\r
html = that._contentHTML;
\r
-
\r
+
\r
+ that._ready = true; // これを削除すると ie6,7,8 で Stack overflow at line : 0 意味不明 'readystatechange' が繰り返し起こりループする??
\r
delete that._contentHTML;
\r
delete that._contentHTML;
\r
- that._ready = true;
\r
\r
idoc.open();
\r
idoc.writeln( html );
\r
\r
idoc.open();
\r
idoc.writeln( html );
\r