2014-09-03 4 views
7

Ich arbeite mit der History-API und Push-und Pop-Status verwenden. Ich möchte das popstate-Event in einem Szenario stoppen, in dem ich den Hash nur an die URL angehängt habe. zum Beispiel in einigen Fällen bei Klick von Anker anfügt es # an die URL und popstate wird sofort ausgelöst) Ich möchte alle Szenarien vermeiden, in denen # oder #somehasvalue an die URL angefügt ist und Popstate von feuern zu stoppen. Ich führe die URLs mit Abfrageparametern und ich habe kein Szenario, in dem ich das popstate Ereignis mit in der URL auslösen muss.Stop feuern popstate auf Hashwechsel

Hier ist mein Code.

if (supportsHistoryApi()) { 

    window.onpopstate = function (event) { 
    var d = event.state || {state_param1: param1, state_param2: param2};      
    var pathName = window.location.pathname, 
     params = window.location.search; 

    loadData(event, pathName + params, d.state_param1, d.state_param2); 

} 

Antwort

6

Soweit ich festgestellt habe, kann man den popstate leider nicht davon abhalten zu feuern.

Sie können nach dem Objekt event.state suchen. Das ist bei einer Hash-Änderung null. Also würde ich einen Event-Handler am Anfang

if(event.state === null) { 
    event.preventDefault(); 
    return false; 
} 

Um Ihre popstate Zugabe vorschlagen. Ich denke, das ist der beste Weg, das Auslösen des popstate-Handling-Codes auf Ihrer Seite zu verhindern, wenn sich der Hash ändert, aber ich wäre interessiert, ob es andere Lösungen gibt.

+0

Dies funktioniert nicht, wenn Sie zur ersten Seite zurückkehren, die Sie geöffnet haben. Denn dann ist der 'Zustand' auch 'Null', aber immer noch keine Hashänderung –