2013-05-18 13 views
5

Wie in der Dokumentation (http://www.asual.com/jquery/address/docs/) zu sehen, hat das Plugin ein Ereignis zu erkennen, wenn die Zurück/Vorwärts-Taste des Browsers gedrückt wurde.Unterscheidung zwischen Zurück/Vorwärts in jquery Adresse Plugin

$ .address.externalChange (fn)

Meine Frage ist, ob es eine Möglichkeit zu wissen, wenn der Rücken gedrückt wird und wenn das vordere gedrückt wird. Zum Beispiel funktioniert dies in beiden Fällen:

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

Vielen Dank.

Antwort

2

Nach meinem Wissen kann kein History-Plugin erkennen, welche Browser-Taste genau gedrückt wurde.

Das Beste, was Sie tun können, ist, einen Verlauf der besuchten Seiten zu behalten und dann zu überprüfen, ob die neue Seite weiter hinten im Verlauf als die aktuelle ist. Wenn Seiten ohne die Zurück-/Vorwärts-Taste erneut aufgerufen werden, erhalten Sie möglicherweise falsche Ergebnisse mit unterem Code.

Ungeprüfte Beispielcode:

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

Ich kann es wirklich nicht zur Arbeit bringen. Ich versuche ein Rätsel zu lösen, aber ich bin nicht fähig dazu. Danke – Alvaro

+0

Ich gab dir das Kopfgeld, aber immer noch kann es nicht funktionieren. Könntest du bitte eine Geige schreiben? – Alvaro

+0

Vielleicht könntest du eine Geige spielen und wir werden sehen, was das Problem dort ist? – Tyron

0

ich endlich herausgefunden. Dieser Code funktioniert für mich in einer normalen Seitennavigation, in der ich zwischen den Seiten 1, 2, 3 usw. blättern kann. Der Code erkennt in diesen Fällen vorwärts und rückwärts.

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; 

});