2013-05-18 8 views
5

Come si può vedere nella documentazione (http://www.asual.com/jquery/address/docs/), il plugin ha un evento da rilevare quando viene premuto il pulsante back/forward del browser.Differenzia tra back/forward in jquery address plugin

$ .address.externalChange (fn)

La mia domanda è se c'è un modo per sapere quando si preme la schiena e quando viene premuto il forward. Ad esempio, questo funzionerà in entrambi i casi:

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

Grazie.

risposta

2

Per quanto ne so, nessun plug-in per la cronologia può rilevare quale pulsante del browser è stato premuto.

Il meglio che puoi fare è conservare una cronologia delle pagine visitate, quindi controllare se la nuova pagina è più indietro nella cronologia di quella attuale. Quando le pagine vengono riviste senza il pulsante Indietro/Avanti, probabilmente otterrai risultati errati con il codice sottostante.

codice di esempio testato:

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

Non riesco davvero a farlo funzionare. Sto cercando di creare un jsfiddle ma non ne sono capace. Grazie – Alvaro

+0

Ti ho dato la taglia, ma non riesco ancora a farlo funzionare. Potresti postare un violino, per favore? – Alvaro

+0

Forse potresti iniziare un violino e vedremo qual è il problema lì? – Tyron

0

ho finalmente capito. Questo codice funziona per me in una normale navigazione di pagina, in cui navigo tra: Pagina1, Pagina2, Pagina3, ecc. Il codice riconosce indietro e avanti in questi casi.

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; 

});