Проверка наличия метода pushState()
для объекта глобальной истории должна быть достаточной.
function supports_history_api() {
return !!(window.history && history.pushState);
}
Для более общего определения функций HTML 5 я бы посмотрел на Modernizer
http://diveintohtml5.info/detect.html#modernizr
Это защитит ваш код от запутанных особенностей каждого теста, сделает код более читабельным и менее подверженным ошибкам.Со скриптом Modernizer на своей странице вы просто сделаете:
if (Modernizr.history) {
// history management works!
} else {
// no history support :(
// fall back to a scripted solution like History.js
}