2012-04-01 45 views
4

Gibt es trotzdem zu überprüfen, ob ein window.history.go Befehl die window.location erfolgreich ändern kann oder nicht?Überprüfen, ob window.history.go erfolgreich ist?

Wenn ich eine window.history.go(-5) mache, wenn nur drei Seiten im Verlaufsstapel sind, wird der Browser nichts tun.

Gibt es eine Möglichkeit zu überprüfen, ob das passiert und anderen Code ausführen? Ein Fehler Rückruf von Art.

Danke.

Antwort

3

Für eine sofortige Antwort sollten Sie zuerst überprüfen, history.length um sicherzustellen, dass es mindestens 6, z. gehen Sie -5. Abgesehen davon denke ich, dass der einzige Weg ist, setTimeout zu verwenden, und wenn das Skript noch läuft, wird der Rückruf ausgeführt.

+0

Nun, ich mache eigentlich 'window.history.go (- (window.length-1))' so nicht sicher, wie ich würde überprüfen 'history.length' in einer Weise, die nützlich sein würde. Ich denke ich werde versuchen die 'setTimeout' Methode und sehen, ob das für diesen Zweck funktioniert ... – leomancini

+0

@leomancini:' if (window.length> = history.length) 'dann kann es unmöglich funktionieren. – Ryan

+0

Ack. Ich habe mich vertippt. Ich wollte sagen, ich mache 'window.history.go (- (window.history.length-1));' – leomancini

0

Nicht wirklich ein JS-Experte, aber wenn Sie eine Aktion ausführen möchten, wenn der Benutzer vor- oder zurückgeht, können Sie URL-Hashes verwenden und eine Funktion mit dem jQuery onhashchange-Ereignis auslösen. Dies wird Ihnen nicht die Position in der Geschichte geben, und ich bin mir auch nicht sicher über die Cross-Browser-Kompatibilität, aber es hat die Arbeit für mich bisher getan.

$(window).on('load' function(){ 
    var hash = parent.top.location.hash; 
    if(hash == '' || hash == '#' || hash == null){ 
     //if none, set a hash and reload page 
     parent.top.location.hash = '#/some/hash'; 
     parent.top.location.reload(true);//use true if you dont want to use cached items 
    } 
}); 
$(window).on('hashchange', function(){ 
    do_something(parent.top.location.hash); 
}); 
function do_something(hash){ 
    //this function will be executed each time the '#' changes 
    console.log('hash changed to '+hash); 
} 
Verwandte Themen