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
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
Nasıl Python ile şimdiki zaman almak i...
Nasıl bir liste boyutunu almak için...
Nasıl Gıt mevcut şube adı almak için?...
Nasıl MySQL kullanıcı hesaplarının bir...
Nasıl ASP.NET MVC [HandleError] öznite...