Jednorazowe odświeżenie strony po pierwszym załadowaniu strony


84

Chciałbym zaimplementować kod JavaScript, który stwierdza, że: jeśli strona jest wczytywana w całości, odśwież stronę natychmiast, ale tylko raz. Utknąłem na „tylko raz”:

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

daje to pętlę bez „tylko raz”. jQuery jest ładowany, jeśli to pomaga.


1
Co osiągasz, przeładowując stronę? Być może istnieje lepszy sposób rozwiązania problemu.
FishBasketGordo

na stronie zaczyna się pełnoekranowy skrypt galerii jquery, ale kciuki nigdy nie są ładowane w całości. jeśli klikniesz przycisk "odśwież" dla strony, to po prostu załaduje pozostałe ... więc jasne jest, że szukam jakiegoś obejścia ... osobne podanie kciuków jest zbyt skomplikowane (CMS), inne poprawki nie zrobiły To naprawdę nie pomaga ... To 4 MB obrazów, ok. 300kb każdy, w pewnym momencie kciuki obrazu nie są już zmieniane i wyświetlane (przekroczenie limitu czasu? Zbyt duży, zbyt duży?), Ale strona kończy się ładować.
Martin

Miałem podobny problem (javascripts nie działają) podczas korzystania z pjax pjax.heroku.com .
Pratik Khadloya

Odpowiedzi:


97

Powiedziałbym, że użyj skrótu, w ten sposób:

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

tak. Właśnie to zasugerowałem.
p3drosola

tak, podobne do mojej sugestii użycia parametru $ _GET, ale trochę łatwiejsze, ponieważ dostęp do skrótu w JS jest łatwiejszy niż dostęp do parametru $ _GET ...
maxedison

4
Jest to najprostsze, o ile w adresach URL nie ma już skrótów. W takim przypadku odczytanie parametru GET byłoby lepsze.
David

Jak możesz to zrobić bez dołączania adresu URL?
zero_cool

sprytne rozwiązanie! kocham to! ❤
anu

48

Kiedy napotykam ten problem, szukam tutaj, ale większość odpowiedzi próbuje zmodyfikować istniejący adres URL. Oto kolejna odpowiedź, która działa dla mnie przy użyciu localStorage.

<script type='text/javascript'>

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

</script>

Kreatywne rozwiązanie.
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>

Ze względu na warunek if strona przeładuje się tylko raz, ja też napotkałem ten problem i szukając znalazłem to fajne rozwiązanie. U mnie to działa dobrze.


9

Sprawdź ten link, zawiera kod skryptu java, którego możesz użyć do odświeżenia strony tylko raz

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

Istnieje więcej niż jeden sposób na odświeżenie strony:

rozwiązanie1 :

Aby odświeżyć stronę przy każdym jej otwarciu, użyj:

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

rozwiązanie2:

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

Następnie zmień swoje zdanie

<Body onLoad=" LoadOnce()" >

rozwiązanie3:

response.setIntHeader("Refresh", 1);

Ale to rozwiązanie odświeży stronę więcej niż jeden raz, w zależności od określonego czasu

Mam nadzieję, że ci to pomoże


3

umieściłem to w mojej głowie tagi strony, na której chcę jednorazowo załadować:

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

wartość „mc” można ustawić na dowolną, ale obie muszą być zgodne w dwóch wierszach. a „= mobile” może być „= cokolwiek chcesz”, wystarczy wartość, aby zatrzymać odświeżanie.


3

Wreszcie po dwóch miesiącach poszukiwań otrzymałem rozwiązanie do ponownego ładowania strony.

Działa dobrze na moim projekcie JS po stronie klienta.

Napisałem funkcję, która poniżej przeładowuje stronę tylko raz.

1) Najpierw uzyskaj czas wczytywania przeglądarki

2) Pobierz aktualny znacznik czasu

3) Czas ładowania przeglądarki internetowej + 10 sekund

4) Jeśli czas wczytywania przeglądarki jest o 10 sekund dłuższy niż aktualny znacznik czasu, wówczas stronę można odświeżyć za pomocą funkcji "reloadPage ();"

Ale jeśli nie jest dłuższy niż 10 sekund, oznacza to, że strona jest właśnie ponownie ładowana, więc nie będzie ponownie ładowana.

5) Dlatego jeśli wywołasz "reloadPage ();" funkcja gdzieś na stronie twojego pliku js zostanie ponownie załadowana tylko raz.

Mam nadzieję, że to komuś pomoże

// 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>

to działa doskonale


Uwaga: 1000 oznacza 1 sekundę, którą możesz ustawić na dowolne przedziały czasowe.
Godwin Tommy

1

Po </body>tagu:

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

0

Musisz użyć informacji GET lub POST. GET byłoby najprostsze. Twój JS sprawdziłby adres URL, gdyby nie znaleziono określonego parametru, nie odświeżyłby tylko strony, ale raczej wysłałby użytkownika do „innego” adresu URL, który byłby tym samym adresem URL, ale z parametrem GET .

Na przykład:
http://example.com -> odświeży
http://example.com?refresh=no -> nie odświeży

Jeśli nie chcesz niechlujnego adresu URL, umieściłbym trochę PHP na początku treści, która odzwierciedla ukrytą wartość, która zasadniczo mówi, czy niezbędny parametr POST, aby nie odświeżać strony, został uwzględniony w początkowym żądaniu strony. Zaraz po tym można dołączyć kod JS, aby sprawdzić tę wartość i w razie potrzeby odświeżyć stronę Z tymi informacjami POST.


0

Spróbuj z tym

var element = document.getElementById('position');        
element.scrollIntoView(true);`

0

Spróbuj użyć poniższego kodu

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

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

    return;
    }
});



0

użyj window.localStorage ... w ten sposób

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

To dla mnie praca


0

Oto kolejne rozwiązanie z setTimeout, nie idealne, ale działa:

Wymaga parametru w aktualnym adresie URL, więc po prostu zobrazuj aktualny adres URL tak:

www.google.com?time=1

Poniższy kod powoduje jednorazowe ponowne załadowanie strony:

 // 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);
           }
          }

Zaakceptowana odpowiedź zawiera najmniejszą ilość kodu i jest łatwa do zrozumienia. Właśnie przedstawiłem inne rozwiązanie tego problemu.

Mam nadzieję, że to pomoże innym.


-1

Użyj rel = "external", jak na przykładzie poniżej

<li><a href="index.html" rel="external" data-theme="c">Home</a></li>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.