CodeByZen
@CodeByZen
php, js, my/mssql, sqlite, html, css, it-consult

При document.location.href и document.location.reload браузер не скролит к якорю. почему?

Есть у меня вот такое
function anchorReload(anchor) {
		var tabValue = document.URL;
		window.location = tabValue.substring(0, tabValue.lastIndexOf("#"));
		window.location.hash = "#"+anchor;
		location.reload();
	}


рефрешится все нормально, но к анкору не скролит.
Почему?
  • Вопрос задан
  • 2787 просмотров
Пригласить эксперта
Ответы на вопрос 2
@iShatokhin
JS developer
Надо было сразу обратится к google:

webkit браузеры игнорируют прямую установку hash. Чтобы обойти этот баг, надо использовать такой хак:

function setHash(newHash) {
    location.hash = 'someHashThatDoesntExist'; // несуществующий хеш или пустой хеш (как вы правильно делаете в своем же ответе)
    location.hash = newHash;
}

if (location.hash) { // на случай рефреша
  document.addEventListener("DOMContentLoaded", function(event) { 
    setHash(location.hash);
  });
}
Ответ написан
CodeByZen
@CodeByZen Автор вопроса
php, js, my/mssql, sqlite, html, css, it-consult
Все оказалось просто.
// в функции
    window.location.hash = ''; // снимаем хеш
    window.location.hash = '#comment55'; // ставим нужный
    window.location.reload(true); // рефрешим


Однако это работает только в FireFox. А в Google Chrome, Safari, Opera этот прием не работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы