SORU
31 Aralık 2010, Cuma


Nasıl geçmişi ile tarihi değişiklikler hakkında bildirim almak için.pushState?

HTML5 history.pushState tarayıcı geçmişi değiştirmek için tanıtır artık web siteleri birlikte bu kullanarak URL fragment identifier değiştirmek yerine Ajax ile başlayalım.

Ne yazık ki, bu aramaları artık onhashchange tarafından tespit edilemez anlamına gelir.

Benim sorum:Orada güvenilir bir şekilde kesmek. ;)) bir web sitesi history.pushState kullandığında algılamak için? Belirtimi olayları hakkında bir şey (en azından bir şey bulamadım) devlet değildir.
Bir cephe oluşturmak için çalıştım ve kendi JavaScript bir nesne ile window.history yerine, ama herhangi bir etkisi olmadı.

Ayrıntılı açıklama:Firefox bu değişiklikleri algılar ve buna göre hareket etmesi gereken bir eklenti geliştiriyorum.
Biliyorum orada buna benzer bir soru bir kaç gün önce o sordu, ister dinleme için bazı DOM events verimli olurdu ama tercih etmiyorum güveniyor çünkü bu olaylar olabilir oluşturulan bir çok farklı sebep.

Güncelleme:

onpopstate pushState çağrıldığında tetiklenir gösteren Here is a jsfiddle (4 veya 8 Chrome, Firefox) (ya da ben yanlış bir şey yapıyorum? Bedava geliştirmek için!) hissediyorum.

Güncelleme 2:

(Yan) başka bir sorun window.location pushState (ama bu konuda bence zaten burada okudum) kullanılırken güncellenir.

CEVAP
3 Ocak 2011, PAZARTESİ


5.5.9.1 Olay tanımlar

popstateolay oturumu tarihi bir giriş gezinirken bazı durumlarda ateş etti.

Buna göre, popstate pushState kullandığınızda kovulmak için bir neden yok. Ama pushstate gibi bir olay yararlı olacaktır. history ana nesne olduğundan, dikkatli olmak gerekir, ama Firefox bu durumda güzel olacak gibi görünüyor. Bu kod gayet güzel çalışıyor:

(function(history){
    var pushState = history.pushState;
    history.pushState = function(state) {
        if (typeof history.onpushstate == "function") {
            history.onpushstate({state: state});
        }
        // ... whatever else you want to do
        // maybe call onhashchange e.handler
        return pushState.apply(history, arguments);
    }
})(window.history);

Senin jsfiddlebecomes:

window.onpopstate = history.onpushstate = function(e) { ... }

Aynı şekilde maymun-yama window.history.replaceState.

Not: elbette sadece genel nesne onpushstate ekleyebilirsiniz, ve hatta daha olayları add/removeListener ile yapabilirsiniz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • michaeljacksonVEVO

    michaeljacks

    2 EYLÜL 2009
  • TotalxLuna

    TotalxLuna

    27 Kasım 2011