В Webkit была ошибка, из-за которой неправильно реализовано событие «popstate».Прочтите этот простой пост, объясняющий проблему (классное маленькое шоу и расскажите): http://www.bcherry.net/playground/pushstate
Я бы предложил реализовать собственный трекер событий "popstate" для Safari.Примерно так:
$(window).load(function(){
function fire_popstate(){
$(this).trigger("popstate"); // fire it when the page first loads
}
var lasthash = window.location.hash;
setInterval(function(){
var currenthash = window.location.hash;
if(lasthash != currenthash){
fire_popstate();
}
}, 500);//check every half second if the url has changed
});
Вы можете заключить этот оператор в тест браузера, чтобы проверить наличие сафари.Еще лучше посмотреть, было ли запущено «popstate» ко времени готовности DOM, а затем применить внутреннюю функцию для замены реализации.Единственное, чего вы не хотите, это запускать два события popstate (дублирование логики вашего обработчика событий, отличный способ заблокировать пользовательский интерфейс).