Есть такая конструкция: На каждой странице сайта (в футере) есть код
<button style="display:none!important" id="block1">
</button>
<script type="text/javascript">
if (sessionStorage.getItem("timeraSZ") === "true") {} else {
$(document).ready(function() {
$.get('/shop/invoices', function(data) {
$('#block1').html($('.col_inv_id', data).html());
setTimeout(function() {
var link = $('#block1 a').attr('href');
window.location.replace(link);
}, 100);
});
});
}
</script>
Он со страницы /shop/invoices
подгружает первый элемент с нужным классом и выводит его в button id="block1"
, и после загрузки страницы происходит редирект по ссылке указанной в подгружаемом блоке.Также это все заключено в проверку sessionStorage
.
Пример подгружаемого блока:
<a href="/shop/order/UqSUWOw423YzfeP9yt0DAU5hg9ZnvUdNI6MVPsko" title="Просмотр заказа">00018</a><small><a href="javascript://" onclick="return invoiceJournal('18')">журнал</a></small>
а также вторая ссылка скрыта
<style>#block small a {pointer-events: none;cursor: default;display:none}</style>
На странице, на которую просходит редирект установлен код
<script type='text/javascript'>
setTimeout(function(){history.back();}, 100);
</script>
<script type='text/javascript'>
sessionStorage.setItem("timeraSZ", "true");
</script>
Первое - возврат на предыдущую страницу, второе - создание той самой записи в sessionStorage
.Но тут появились 2 проблемы:
history.back()
возвращает не на ту страницу с
которой пришел, а на страницу перед ней.То есть - если я был на /shop
, очистил хранилище и перешел на /shop/dal/01
, то после выполения скриптом меня возвращает не на /shop/dal/01
, а на /shop
. Все бы ничего, но при попытке входа на сайт с адресной строки напрямую - невозможно, ибо если я захожу на тот же /shop
, меня возвращает на домашнюю страницу / поисковик. то есть, возвращает на 2 шага назад, вместо одного. Я пробовал и просто history.back()
, и history.back(-1)
, и history.go(-1)
и т.д - одинаково.
Первый вопрос решился просто - кусок if (sessionStorage.getItem("timeraSZ") === "true") { }
надо было заменить на
if (sessionStorage.getItem("timeraSZ") === "true") {
}
Второй решился заменой window.location.replace(link);
на $(location).attr('href',link);
Ответ на второй вопрос. Цитата с ресурса MDN Location.replace().
The Location.replace() method replaces the current resource with the one at the provided URL. The difference from the assign() method is that after using replace() the current page will not be saved in session History, meaning the user won't be able to use the back button to navigate to it.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся с ошибкой "Request failed with status code 404" пытаясь отправить запрос из формыПодскажите в чем может быть проблема
Для чего используется строка return undefined;? Я удалила, но вроде результат компиляции не изменилсяИ когда actiion равен undefined?
Решил покопаться с JS без использования jQueryПростая задачка при наличии упомянутой библиотеки, но, все же