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.

Jaskółka oknówka
źródło
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();
    }
}
Cokegod
źródło
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>
Haimei
źródło
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.

Zatemitha Sumanadasa
źródło
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

Areeg Samir
źródło
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.

mikrofon
źródło
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();
Mert Kadir Gürsoy
źródło
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

Godwin Tommy
źródło
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>
Vlad Webster
źródło
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.

maxedison
źródło
0

Spróbuj z tym

var element = document.getElementById('position');        
element.scrollIntoView(true);`
user2053927
źródło
0

Spróbuj użyć poniższego kodu

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

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

    return;
    }
});
Nithun Aravind
źródło
0
        var foo = true;
        if (foo){
            window.location.reload(true);
            foo = false;

        }
Ben Bieler
źródło
0

Użyj tego

<body onload =  "if (location.search.length < 1){window.location.reload()}">
bakchod_launda
źródło
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

Darmawansyah Developer
źródło
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.

MING WU
źródło
-1

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

<li><a href="index.html" rel="external" data-theme="c">Home</a></li>
Jay Bharat
źródło