2013-05-18 6 views
5

ドキュメント(http://www.asual.com/jquery/address/docs/)に示されているように、プラグインにはブラウザの戻る/進むボタンが押されたときを検出するイベントがあります。jqueryアドレスプラグインのバック/フォワードを区別する

$ .address.externalChange(FN)

バックが押されたときに前方が押されたときに知る方法があるかどうか私の質問です。たとえば、両方の場合に有効です。

$.address.externalChange(function() { console.log('back/forward pressed'); }); 

ありがとうございます。

答えて

2

私の知る限り、ヒストリープラグインは正確にどのブラウザボタンが押されたかを検出することはできません。

あなたができることは、訪問したページの履歴を保存して、新しいページが現在のページよりも過去の履歴に戻っているかどうかを確認することです。戻る/進むボタンを使わずにページを再訪すると、おそらく下のコードで間違った結果になるでしょう。

未テストのコード例:

var visitedPages = [$.address.path()]; 
var currentPage = $.address.path(); 

$.address.internalChange(function() { 
    visitedPages.push($.address.path()); 
}); 

$.address.externalChange(function() { 
    var newPage = $.address.path(); 
    var currentPageIndex = -1; 
    var newPageIndex = -1; 

    for (var i = 0; i < visitedPages.length; i++) { 
     if (visitedPages[i] == currentPage) currentPageIndex = i; 
     if (visitedPages[i] == newPage) newPageIndex = i; 
    } 

    if (newPageIndex == -1 || currentPageIndex == -1) { 
     console.log("unkown button pressed"); 
    } else { 
     if (newPageIndex > currentPageIndex) { 
      console.log('forward pressed'); 
     } else 
     if (newPageIndex < currentPageIndex) { 
      console.log('back pressed'); 
     } else { 
      console.log('page reloaded?'); 
     } 
    } 
}); 
+0

私は実際に動作させることはできません。私はjsfiddleを作成しようとしていますが、私はどちらも能力がありません。ありがとう – Alvaro

+0

私はあなたに恩恵を与えましたが、それでもうまくいきません。あなたはフィドルを投稿できますか? – Alvaro

+0

多分あなたはフィドルを始めることができ、私たちはそこに問題が何かを見るでしょうか? – Tyron

0

私は最終的に考え出しました。このコードは通常のページナビゲーションで私のために働きます。ここではPage1、Page2、Page3などの間をナビゲートします。コードはそのような場合に前後を認識します。

var visitedPages = [$.address.path()]; 
var first_load = true; 

$.address.internalChange(function() { 

    visitedPages.push($.address.path()); 

}); 

$.address.externalChange(function() { 

    var newPage = $.address.path(); 

    if (visitedPages[visitedPages.length-2] == newPage) { 

     console.log('back'); 
     visitedPages.splice(visitedPages.length-1 , 1); 

    } else if (first_load === false) { 

     console.log('forward');  
     visitedPages.push($.address.path()); 

    } 

    first_load = false; 

}); 
関連する問題