Решение
'use strict';
function previousPage() {
if (window.location.pathname.split('/').filter(({ length }) => length > 0).length > 0) {
window.history.back();
}
}
Объяснение
window.location.pathname
даст вам текущий URI.Например, https://domain/question/1234/i-have-a-problem
даст /question/1234/i-have-a-problem
.См. Документацию о window.location для получения дополнительной информации.
Далее, вызов split()
даст нам все фрагменты этого URI.так что если мы возьмем наш предыдущий URI, у нас будет что-то вроде ["", "question", "1234", "i-have-a-problem"]
.См. Документацию о String.prototype.split () для получения дополнительной информации.
Здесь вызывается filter()
, чтобы отфильтровать пустую строку, созданную обратной косой чертой.Он будет возвращать только фрагмент URI, длина которого больше 1 (непустая строка).Так что у нас было бы что-то вроде ["question", "1234", "i-have-a-question"]
.Это можно было бы написать так:
'use strict';
window.location.pathname.split('/').filter(function(fragment) {
return fragment.length > 0;
});
См. Документацию о Array.prototype.filter () и Разрушающее присваивание для получения дополнительной информации.
Теперь, если пользователь пытается вернуться, находясь на https://domain/
, мы не будем запускать оператор if и поэтому не будем запускать метод window.history.back()
, чтобы пользователь оставался на нашем веб-сайте.Этот URL будет эквивалентен []
, который имеет длину 0
, а 0 > 0
имеет значение false.Следовательно, молча терпит неудачу.Конечно, вы можете что-то зарегистрировать или выполнить другое действие, если хотите.
'use strict';
function previousPage() {
if (window.location.pathname.split('/').filter(({ length }) => length > 0).length > 0) {
window.history.back();
} else {
alert('You cannot go back any further...');
}
}
Ограничения
Конечно, это решение не будет работать, если браузер не поддерживает History API.Ознакомьтесь с документацией, чтобы узнать больше об этом, прежде чем использовать это решение.