0

jQMobile の単一ページ AJAX ロードを使用しています。各ページは独自のファイルです。

必要に応じて、ページに HOME ボタンを動的に作成します。今日は、"index.html" を指す <A> タグを使用するだけです。Web アプリの jQueryMobile の履歴をチェックして、index.html ページが読み込まれた履歴の中で最初の時間を見つけ、window.history.back(-##); を呼び出す方法はありますか? 履歴とナビゲーションに追加するだけでなく、ページに追加します。

コードは、履歴に index.html がない場合、window.location.href だけでページに移動するようなものになります。

function
GoHome()
{

  /* This is a function I don't know even exists, but it would find the first occurrence of index.html */
  var togo = $mobile.urlHistory.find( 'index.html' )  
  var toback = $mobile.urlHistory.length -1 - togo;

  if ( togo >= 0 )
    window.history.back( -1 * toback )
  else
    $.mobile.changePage( '/index.html' )

}

履歴が index.html => profile.html => photos.html の場合 $.mobile.urlHistory.find('index.html') のマジック関数は 0 を返し、履歴の長さは 3 になるので、私の計算ではindex.html ページに戻るには、window.history.back( -2 ) に移動します。その検索関数が -1 を返した場合、それは見つからず、changepage 呼び出しを行うだけです。

ありがとう/アンディ

4

1 に答える 1

0

読んで読んで読んで、もう何を読んでいるのかよくわからなかったので、この関数を書きました。その正しい解決策または最適な解決策、またはそれを要約できるかどうかさえわかりません。

これを使って呼び出す

console.log( 'FindHome: ' + FindHome( ["", 'index.html'] ) );

jQueryMobile urlHistory.stack の最初のエントリから現在のインデックスまで検索し、インデックス ページが見つかるかどうかを確認します。そこから、新しいページをロードするか、-xx を既に履歴にあるページに戻すかを決定できます。このようにして、歴史は幾分きれいになります。

function
FindHome( _home )
{
var stk = $.mobile.urlHistory.stack;
var ai  = $.mobile.urlHistory.activeIndex;

for ( var idx=0; idx <= ai; idx++ )
{
    var obj = $.mobile.path.parseUrl( $.mobile.urlHistory.stack[idx].url );
    if(typeof _home == "string")
    {
        if ( _home == obj.filename )
            return( idx - ai );
    }
    else
    {
        for(var x in _home)
        {
            if ( _home[x] == obj.filename )
                return( idx - ai );
        }               
    }
}

return ( 0 );   
}
于 2013-08-01T22:25:31.527 に答える