Одноразове оновлення сторінки після завантаження першої сторінки


84

Я хотів би застосувати код JavaScript, який стверджує: якщо сторінка завантажена повністю, оновіть сторінку негайно, але лише один раз. Я застряг у "лише раз":

window.onload = function () {window.location.reload()}

це дає цикл без "лише один раз". jQuery завантажується, якщо це допомагає.


1
Що ви робите, перезавантажуючи сторінку? Може бути кращий спосіб вирішити проблему.
FishBasketGordo

на сторінці починається повноекранний сценарій галереї jquery, але великі пальці ніколи не завантажуються повністю. якщо натиснути кнопку "оновити" для сторінки, вона просто завантажить решту ... отже, зрозуміло, що я шукаю якийсь обхідний шлях ... окремі пальці занадто складні (CMS), інші виправлення помилок не дійсно не допомагає ... Це 4 МБ зображень, приблизно 300 кб кожен, в якийсь момент великі пальці зображень більше не змінюються і не відображаються (час очікування - занадто великий, занадто великий ??), але сторінка завантажується.
Мартін

Я мав подібну проблему (javascripts не працює) під час використання pjax pjax.heroku.com .
Пратік Хадлоя

Відповіді:


97

Я б сказав, використовуйте хеш, наприклад:

window.onload = function() {
    if(!window.location.hash) {
        window.location = window.location + '#loaded';
        window.location.reload();
    }
}

так. я просто збирався це запропонувати.
p3drosola

так, схоже на мою пропозицію використовувати параметр $ _GET, але трохи простіше, оскільки доступ до хешу в JS простіший, ніж доступ до параметра $ _GET ...
maxedison

4
Це найпростіше, якщо в URL-адресах ще немає хешів. У цьому випадку читання параметра GET було б кращим.
Девід

Як ви можете це зробити, не додавши URL-адресу?
zero_cool

розумне рішення! люблю це! ❤
ану

48

Зіткнувшись із цією проблемою, я шукаю тут, але більшість відповідей намагаються змінити існуючу URL-адресу. Ось ще одна відповідь, яка працює для мене за допомогою localStorage.

<script type='text/javascript'>

(function()
{
  if( window.localStorage )
  {
    if( !localStorage.getItem('firstLoad') )
    {
      localStorage['firstLoad'] = true;
      window.location.reload();
    }  
    else
      localStorage.removeItem('firstLoad');
  }
})();

</script>

Творче рішення.
JoJo

@Haimei Thx a lot __ / \ __
Pradeep kumar

30
<script type="text/javascript">
$(document).ready(function(){    
    //Check if the current URL contains '#'
    if(document.URL.indexOf("#")==-1){
        // Set the URL to whatever it was plus "#".
        url = document.URL+"#";
        location = "#";

        //Reload the page
        location.reload(true);
    }
});
</script>

Через умову if сторінка перезавантажиться лише один раз. Я теж зіткнувся з цією проблемою, і коли шукав, знайшов це гарне рішення. Це для мене добре працює.


9

Позначте це посилання, воно містить код Java-скрипта, який ви можете використати для оновлення сторінки лише один раз

http://www.hotscripts.com/forums/javascript/4460-how-do-i-have-page-automatically-refesh-only-once.html

Існує кілька способів оновити сторінку:

рішення1 :

Щоб оновити сторінку один раз кожного разу, коли вона відкривається, використовуйте:

<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</head>

розчин2:

<script language=" JavaScript" >
<!-- 
function LoadOnce() 
{ 
window.location.reload(); 
} 
//-->
</script>

Потім змініть своє слово

<Body onLoad=" LoadOnce()" >

рішення3:

response.setIntHeader("Refresh", 1);

Але це рішення неодноразово оновлюватиме сторінку залежно від часу, який ви вказали

Сподіваюся, це вам допоможе


3

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

<?php if(!isset($_GET['mc'])) {
echo '<meta http-equiv="refresh" content= "0;URL=?mc=mobile" />';
} ?>

значення "mc" можна встановити як завгодно, але обидва повинні збігатися в 2 рядках. а "= mobile" може бути "= anythingyouwant", йому просто потрібно значення, щоб зупинити оновлення.


3

Нарешті, я отримав рішення для перезавантаження сторінки один раз через два місяці дослідження.

Це чудово працює на моєму клієнтському проекті JS.

Я написав функцію, яка нижче перезавантажує сторінку лише один раз.

1) Спочатку отримуємо час завантаження браузера

2) Отримати поточну мітку часу

3) Час завантаження браузера + 10 секунд

4) Якщо час завантаження веб-переглядача + 10 секунд більший за поточну мітку часу, сторінку можна оновити за допомогою "reloadPage ();"

Але якщо вона не перевищує 10 секунд, це означає, що сторінку просто перезавантажують, тому вона не буде перезавантажуватися багаторазово.

5) Тому, якщо ви викликаєте "reloadPage ();" функція десь на вашій сторінці файлу js буде перезавантажена лише один раз.

Сподіваюся, це допоможе комусь

// Reload Page Function //
                function reloadPage() {
                    var currentDocumentTimestamp = new Date(performance.timing.domLoading).getTime();
                    // Current Time //
                    var now = Date.now();
                    // Total Process Lenght as Minutes //
                    var tenSec = 10 * 1000;
                    // End Time of Process //
                    var plusTenSec = currentDocumentTimestamp + tenSec;
                    if (now > plusTenSec) {
                        location.reload();
                    }
                }


                // You can call it in somewhere //
                reloadPage();

3
<script>

function reloadIt() {
    if (window.location.href.substr(-2) !== "?r") {
        window.location = window.location.href + "?r";
    }
}

setTimeout('reloadIt()', 1000)();

</script>

це працює чудово


Примітка: 1000 означає 1 секунду, і ви можете встановити для неї будь-які часові інтервали, які хочете.
Годвін Томмі,

1

Після </body>тегу:

<script type="text/javascript">
if (location.href.indexOf('reload')==-1)
{
   location.href=location.href+'?reload';
}
</script>

0

Вам потрібно буде використовувати інформацію GET або POST. GET було б найпростішим. Ваш JS перевірить URL-адресу, якщо певного параметра не буде знайдено, він не просто оновить сторінку, а скоріше відправить користувача на "іншу" URL-адресу, яка буде такою ж URL-адресою, але з параметром GET в ній .

Наприклад:
http://example.com -> оновить
http://example.com?refresh=no -> не оновить

Якщо ви не хочете брудної URL-адреси, я б включив PHP прямо на початку тексту, який повторює приховане значення, яке суттєво говорить про те, чи був необхідний параметр POST для неоновлення сторінки включений до початкового запиту сторінки. Відразу після цього ви б включили трохи JS для перевірки цього значення та оновлення сторінки ТАКОЮ інформацією POST, якщо це необхідно.



0

Будь ласка, спробуйте використати код нижче

var windowWidth = $(window).width();

$(window).resize(function() {
    if(windowWidth != $(window).width()){
    location.reload();

    return;
    }
});



0

використовуйте window.localStorage ... ось так

var refresh = $window.localStorage.getItem('refresh');
console.log(refresh);
if (refresh===null){
    window.location.reload();
    $window.localStorage.setItem('refresh', "1");
}

Це робота для мене


0

Ось ще одне рішення з setTimeout, не ідеальне, але воно працює:

Для цього потрібен параметр у поточній URL-адресі, тому просто зображення поточної URL-адреси виглядає так:

www.google.com?time=1

Наступний код змушує сторінку перезавантажуватися лише один раз:

 // Reload Page Function //
    // get the time parameter //
        let parameter = new URLSearchParams(window.location.search);
          let time = parameter.get("time");
          console.log(time)//1
          let timeId;
          if (time == 1) {
    // reload the page after 0 ms //
           timeId = setTimeout(() => {
            window.location.reload();//
           }, 0);
   // change the time parameter to 0 //
           let currentUrl = new URL(window.location.href);
           let param = new URLSearchParams(currentUrl.search);
           param.set("time", 0);
   // replace the time parameter in url to 0; now it is 0 not 1 //
           window.history.replaceState({}, "", `${currentUrl.pathname}?${param}`);
        // cancel the setTimeout function after 0 ms //
           let currentTime = Date.now();
           if (Date.now() - currentTime > 0) {
            clearTimeout(timeId);
           }
          }

Прийнята відповідь використовує найменшу кількість коду і її легко зрозуміти. Я щойно запропонував інше рішення цього.

Сподіваюся, це допомагає іншим.


-1

Для прикладу використовуйте rel = "external", як показано нижче

<li><a href="index.html" rel="external" data-theme="c">Home</a></li>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.