2014-09-03 13 views
7

Geçmiş API'siyle çalışıyorum ve push ve pop durumunu kullanıyorum. Popstate etkinliğini, yalnızca karma kelimeyi URL'ye eklediğim bazı senaryolarda tetiklemeyi durdurmak istiyorum. Örneğin bazı durumlarda bağlantı noktası tıklandığında URL'ye # ekler ve hemen ateş edilir.) # veya #somehasvalue'un URL'ye eklendiği ve popstate'un ateşlemeyi durdurduğu tüm senaryolardan kaçınmak istiyorum. URL'leri sorgu parametreleriyle topluyorum ve URL'de # ile tetiklenecek popstate olayına ihtiyacım olan herhangi bir senaryo yok.karbondioksit geçişini durdurma

İşte kodum.

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); 

} 

cevap

6

Bulunduğum kadarıyla popstatın ne yazık ki ateş etmesini engelleyemezsiniz.

Yapabilecekleriniz, event.state nesnesini kontrol etmektir. Bu bir karma değişim için boş olacak. yüzden çok başında

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

sizin popstate için olay işleyicisi ekleyerek öneririm. Bence bu, pops değiştiğinde popstate işleme kodunun yanmasını önlemek için en iyi yoldur, ama başka çözümler olup olmadığını bilmek isterdim.

+0

Bu, açtığınız ilk sayfaya döndüğünüzde çalışmaz. Çünkü o zaman “devlet” de “null”, ama hala bir değişim yok. –