Как вынудить страницу перезагрузить, если все, что было изменено в URL, являются хешем?

Вы можете использовать публичный наблюдаемый список для хранения общедоступных данных или просто создать общедоступный метод настройки для хранения данных и получения из соответствующего контроллера

37
задан serg 20 October 2009 в 03:57
поделиться

3 ответа

Удалить якорь, к которому вы собираетесь перейти, затем использовать подход №2? Поскольку привязки нет, установка хэша не должна прокручивать страницу.

32
ответ дан 27 November 2019 в 03:53
поделиться

Другой вариант - удалить хеш и сохранить его в хранилище сеансов для извлечения при перезагрузке:

var newUrl = location.href + '#myHash';
var splitUrl = newUrl.split('#');
newUrl = splitUrl[0];
if (splitUrl[1]){
    sessionStorage.savedHash = splitUrl[1];
}
location.href = newUrl;

, а затем в верхней части страницы вы можете получить следующий код:

var savedHash = sessionStorage.savedHash;
if (savedHash){
    delete sessionStorage.savedHash;
    location.hash = savedHash;
}
0
ответ дан yts 23 September 2019 в 21:13
поделиться

Следует ожидать, что #foo прокрутится до привязки идентификатора "foo". Если вы хотите использовать подход №1 и перезагрузить его, этот подход может сработать.

if (Object.defineProperty && Object.getOwnPropertyDescriptor) { // ES5
    var hashDescriptor = Object.getOwnPropertyDescriptor(location, "hash"),
    hashSetter = hashDescriptor.set;
    hashDescriptor.set = function (hash) {
        hashSetter.call(location, hash);
        location.reload(true);
    };
    Object.defineProperty(location, "hash", hashDescriptor);
} else if (location.__lookupSetter__ && location.__defineSetter__) { // JS
    var hashSetter = location.__lookupSetter__("hash");
    location.__defineSetter__("hash", function (hash) {
        hashSetter.call(location, hash);
        location.reload(true)
    });
}
2
ответ дан 27 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: