2014-05-02 16 views
10

İstemcide yönlendirme yapan sayfa var, API API kullanarak kullanıyorum. & push/popstate. Hangi tüm modern tarayıcılarda gayet iyi çalışıyor. (arama motorları node.js tarafından desteklenecektir)IE hashchange gerçekleştiğinde popstate çalıştırmıyor IE

Ancak IE, IE11 de dahil olmak üzere, URL'ler ile pushstate çalışır iken IE son zamanlarda, hashchange üzerinde popstate ateş etmez sorun içine çarptı. o akımını değişiyor Örneğin

doğru ateşler

$(document).on('click', 'a', function(e) { 
    e.preventDefault(); 
    History.pushState({}, '', $(this).attr('href')); 
}); 

... ...

$(window).on('popstate', function() { 
    console.log('url changed'); 
}); 

W3C spec göre ... aynen böyle hashchange popstate kovmalıyım Tarihçe. Bununla birlikte, hash bağlantılarını (<a href="#hashchange">...) eklediğimde, IE'de tıklandığında hiçbir şey patlamaz. :/

IE algılamasını yapmak istemem (özellik olarak aynı algılama dolabına girebilecek pek çok tarayıcı var), özellik algılama özelliğini kullanmak yerine. Ancak, tarih olarak (popstate/pushstate) gayet bile eksik itme/popstate meseleyi algılayamaz geri kalan yolu ...

if(!window.history || !window.history.pushState) { ... 

çalışır ... ve bunun yerine hashchange kullanın. :/

Herhangi bir düşünce?

PS. Bir bonus olarak, hashtag url ile jquery.history.js (history.js'nin jquery sarılmış sürümü) kullanılarak her şey biter.

http://localhost/routetest/index.html#/page1/1234 

http://localhost/page1/1234 

olur ... ??? :/

+0

? IE 9 için pushState() ile ilgili bir sorun var gibi görünüyor. Bu soruya verilen yanıtla bakın: http: // stackoverflow.com/questions/3722815/does-internet-explorer-support-pushstate-ve-replacestate – urbz

+1

Ah, özür dilerim. IE11. Sadece modern tarayıcılardan bahsetti ama IE sürümünde başarısız oldu :) – crappish

cevap

1

için Tarih API için bir polyfill kullanmayı deneyin Bu IE11 bilinen bir sorundur ve Kenar önce tüm Internet Explorer tarayıcıları olduğunu.

Bu bağlantıya bakın https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/3740423/. Microsoft yanıtı, bu sorun raporundaki son gönderidir ve çalışan en yeni sürüme dikkat çeker.

Tüm IE sürümleri bu davranışı gösterecek ve etkin davranışı olay çerçevesine yeniden yerleştirme/maymun yamalaması muhtemelen güvenilir bir şekilde çalışmasını sağlamanın tek yoludur. Bu, kendiniz uygulamak istiyorsanız, IE'ye özgü mantığa ihtiyaç duyacağınız anlamına gelir.

0

IE 10 ve 11'de, popstate olayı, yalnızca history.pushState veya replaceState ile ayarlandıktan sonra, yalnızca null olarak ayarlandığında ve yalnızca iki öğe arasında geçiş yapılırken dahil olmak üzere, bir tarih öğesi için tetiklenir. devlet seti vardı. Bu nedenle, hashchange olayında yeni bir tarih öğesinin durumunu ayarlamak gerekir. Durum ayarlandığında, kullanıcı tarayıcı geçmişinde gezinirken popstate olayı tetiklenir. En yeşermeye başladı bile IE hangi sürümü

https://developer.mozilla.org/en-US/docs/Web/API/History