Хотя не, я еще вчера добавил блокирующую переменную, чтобы при запуске из поля ввода или смене страниц hashchange не срабатывал, но хеш менялось, так ее и не убрал
if(c == 1) updateHash("search-"+string);
если убрать эту переменную, то есть как-бы всегда менять хеш без последствий, не зависимо от того откуда запрос пришел то все возвращается на круги своя например кнопка браузера “назад” реагируют через раз, а кнопка “вперед” вообще умирает.
Видимо в случае когда меняется хеш затем выводиться результат и затем опять происходит смена хеш без реакции hashchange, эти все манипуляции сохраняются.