Перезагрузить страницу один раз скриптом при первой загрузке страницы
Приветствую!
Применяю такой код, для перезагрузки страницы 1 раз, после первой загрузки страницы в браузере. if (window.location.href.indexOf("reload")==-1) { window.location.replace(window.location.href+"?reload"); } Однако, этот код, добавляя в адресную строку ?reload, мешает выполнению поискового запроса, по ключевому слову, на странице поиска, делая поиск ошибочным. https://mysite.com/Search/index.html?keyword=apple?reload Можете предложить другой код, который не имеет такого недостатка? Заранее, спасибо. |
Vaska,
window.location.reload(true); |
рони,
Нет, это не работает, страница безконечно перезагружается раз, а нужно 1 раз. |
Вот такой вариант нашел в сети и он работает для меня:
/* if my var reload isn't set locally.. in the first time it will be true */ if (!localStorage.getItem("reload")) { /* set reload locally and then reload the page */ localStorage.setItem("reload", "true"); location.reload(); } /* after reload clear the localStorage */ else { localStorage.removeItem("reload"); // localStorage.clear(); // an option } |
Vaska,
if (!sessionStorage.getItem('reload')) { sessionStorage.setItem('reload', 1); window.location.reload(true); } |
рони,
Ошибся, не там посмотрел. |
Vaska,
:victory: |
рони,
Нет, страницу не перезагружает. |
Vaska,
открытая в новой вкладке страница, должна перезагрузится 1раз. |
Дело в том, что этот скрипт должен перезагружать страницу 1 раз, если устарел токен.
Один раз действительно страница перезагружается, но если на странице токен снова устарел и PHP код подсовывает ваш скрипт, чтобы снова перезагрузить страницу, то страница не перезагружается. Я сначала не понял этого, а потом проверил ещё раз и это обнаружилось. На одной странице несколько блоков, в которых подсовывается скрипт, чтобы перезагрузить страницу, если токен устарел. Эти блоки подгружает Ajax. |
Vaska,
не понимаю. так проверяйте токен, и запоминайте что-то типа if (sessionStorage.getItem('token') !== token) { sessionStorage.setItem('token', token); window.location.reload(true); } |
рони,
На одной странице есть три блока, каждый из которого подгружает свою страницу .html с помощью Ajax. Функция PHP, при подгрузке страницы в блок, проверяет не протух ли токен. Если протух, то подставляет скрипт, чтобы перезагрузить страницу и обновить токен. Вот этот код: if (!localStorage.getItem("reload")) { localStorage.setItem("reload", "true"); location.reload(); } else { localStorage.removeItem("reload"); } срабатывает для подгрузки одного блока, если токен протух, перезагружает всю страницу. Но если токен снова протух, и я хочу перезагрузить второй блок на той же странице, то перезагрузка не работает. Не знаю как лучше объяснить. |
Vaska,
все токены посылайте в эту функцию, если в массиве такого токена нет, страница перезагрузится. function saveT(token) { let arT = sessionStorage.getItem('token') || "[]"; arT = JSON.parse(arT); if (!arT.includes(token)) { arT.push(token) sessionStorage.setItem('token', JSON.stringify(arT)); window.location.reload(true); } } |
Честно говоря не понял вашу задумку.
Для каждого блока есть запрос Ajax, который вызывает контент в блок. Например, для одного из блоков, на странице, есть код вызова: $(function() { //вызывает файл qrcode_tools.html $('.qrcode_tools_user').mouseover(function(event){ setTimeout(function() { $("#qrcode_tools_html").load(HOMESITEURL + '/Index/qrcode_tools.html'); }, 50); $(this).unbind('mouseover'); }); }); В хедере страницы есть код для токена: $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { '__token__': $('meta[name="csrf-token"]').attr('content') }, //cache: false, }); $.ajaxPrefilter('script', function(options) { options.data = ''; // -токен options.cache = true; // -таймстэмп }); В файле PHP я проверяю не протух ли токен и если не протух, то подгружаю контент: public function qrcode_tools() { //Проверка общего одноразового токена __token__ и токена для страницы /home/Store/index.html?store_id=1 __token_index__ {:indexToken()} $csrf_token = input('get.__token__'); //Если $csrf_token пустой, тогда блокировать, чтобы в отдельной странице не открывали без токена в ссылке if (empty($csrf_token)) { header("HTTP/1.1 404 Not Found"); echo "Not Found"; exit; //Проверка токена в ссылке страницы, чтобы совпадал с актуальным токеном и токеном в сессии } elseif ($csrf_token != session('__token__') && $csrf_token != session('__token_index__')) { echo '' . lang('page_outdated') . '<br> <div class="img-loader" style="height:82px;"></div> <em class="tips_arrow"></em> <script> setTimeout(function() { if (!localStorage.getItem("reload")) { localStorage.setItem("reload", "true"); location.reload(); } else { localStorage.removeItem("reload"); } }, 2000); </script> '; exit; } //Загружает контент echo '' . lang('ds_mobile_shopping_better') . '<br> <img class="img-loader" src="' . HOME_SITE_URL . '/qrcode?url=' . config('ds_config.h5_site_url') . '" width="110" height="110" /> <em class="tips_arrow"></em>'; } Куда добавить ваш код и что убрать из моего кода? |
Vaska,
не понимаю, и зачем перезагрузка и в целом,не подскажу, нужен другой специалист. |
рони,
Перезагрузка нужна, чтобы обновить токен, если он протух. Токен нужен актуальный для защиты контента от открытия контента вне нужной страницы. |
Vaska,
возможно, вместо строк 15 - 22 надо что-то типа function saveT(token) { let arT = sessionStorage.getItem('token') || "[]"; arT = JSON.parse(arT); if (!arT.includes(token)) { arT.push(token) sessionStorage.setItem('token', JSON.stringify(arT)); window.location.reload(true); } } saveT($csrf_token<!-- или session('__token__')-->) |
рони,
Сейчас всё правильно работает! Большое спасибо! Можете мне в личку скинуть куда и сколько отблагодарить за помощь? |
Vaska,
Вашего спасибо, достаточно! :) |
Часовой пояс GMT +3, время: 20:26. |