Aggiornamento della pagina una volta dopo il caricamento della prima pagina


84

Vorrei implementare un codice JavaScript che affermi questo: se la pagina viene caricata completamente, aggiorna la pagina immediatamente, ma solo una volta. Sono bloccato al "solo una volta":

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

questo dà un ciclo senza "solo una volta". jQuery viene caricato se questo aiuta.


1
Cosa stai ottenendo ricaricando la pagina? Potrebbe esserci un modo migliore per risolvere il problema.
FishBasketGordo

c'è uno script di galleria a schermo intero jquery che inizia sulla pagina, ma i pollici non vengono mai caricati completamente. se premi il pulsante "aggiorna" per la pagina, carica solo quelle rimanenti ... quindi è chiaro che sto cercando una sorta di soluzione alternativa ... dare i pollici separatamente è troppo complicato (CMS), altre correzioni di bug non davvero di aiuto ... Sono 4 MB di immagini, circa. 300kb ciascuno, ad un certo punto i pollici delle immagini non vengono più ridimensionati e visualizzati (timeout? Troppo, troppo grande ??) ma la pagina termina il caricamento.
Martin

Ho riscontrato un problema simile (javascript non funzionante) durante l'utilizzo di pjax pjax.heroku.com .
Pratik Khadloya

Risposte:


98

Direi di usare hash, in questo modo:

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

Sì. stavo solo per suggerirlo.
p3drosola

sì, simile al mio suggerimento di utilizzare un parametro $ _GET, ma un po 'più semplice dato che accedere all'hash in JS è più facile che accedere al parametro $ _GET ...
maxedison

4
Questo è il più semplice finché non ci sono già hash negli URL. In tal caso, sarebbe meglio leggere un parametro GET.
David

Come puoi farlo senza aggiungere l'URL?
zero_cool

soluzione intelligente! lo adoro! ❤
anu

50

Quando incontro questo problema, cerco qui, ma la maggior parte delle risposte cerca di modificare l'URL esistente. Ecco un'altra risposta che funziona per me usando localStorage.

<script type='text/javascript'>

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

</script>

Soluzione creativa.
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>

A causa della condizione if la pagina si ricaricherà una sola volta, anch'io ho affrontato questo problema e quando cerco ho trovato questa bella soluzione. Questo funziona per me benissimo.


9

Controlla questo collegamento che contiene un codice java-script che puoi utilizzare per aggiornare la tua pagina solo una volta

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

Esistono più modi per aggiornare la tua pagina:

soluzione1 :

Per aggiornare una pagina una volta ogni volta che si apre, utilizzare:

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

sollution2:

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

Quindi cambia il tuo per dire

<Body onLoad=" LoadOnce()" >

soluzione3:

response.setIntHeader("Refresh", 1);

Ma questa soluzione aggiornerà la pagina più di una volta a seconda dell'ora specificata

Spero che ti possa aiutare


4
<script>

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

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

</script>

funziona perfettamente


Nota: 1000 significa 1 secondo che puoi impostare su qualsiasi intervallo di tempo desideri.
Godwin Tommy

3

metto questo nei miei tag head della pagina su cui voglio una singola ricarica:

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

il valore "mc" può essere impostato come si desidera, ma entrambi devono corrispondere nelle 2 righe. e "= mobile" può essere "= anythingyouwant" ha solo bisogno di un valore per interrompere l'aggiornamento.


3

Infine, ho ottenuto una soluzione per ricaricare la pagina una volta dopo due mesi di ricerca.

Funziona bene sul mio progetto JS lato cliente.

Ho scritto una funzione che di seguito ricarica la pagina solo una volta.

1) Per prima cosa ottenere il tempo di caricamento del browser

2) Ottieni il timestamp corrente

3) Tempo di caricamento del browser + 10 secondi

4) Se il tempo di caricamento del browser è maggiore di 10 secondi rispetto al timestamp attuale, allora la pagina può essere aggiornata tramite "reloadPage ();"

Ma se non è più grande di 10 secondi significa che la pagina è stata semplicemente ricaricata, quindi non verrà ricaricata ripetutamente.

5) Quindi se chiami "reloadPage ();" la funzione da qualche parte nella pagina del file js verrà ricaricata solo una volta.

Spero che aiuti qualcuno

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

1

usa window.localStorage ... in questo modo

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

È lavoro per me


1

Dopo il </body>tag:

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

0

Dovresti utilizzare le informazioni GET o POST. GET sarebbe più semplice. Il tuo JS controllerebbe l'URL, se un determinato parametro non fosse trovato, non si limiterebbe ad aggiornare la pagina, ma piuttosto invierebbe l'utente a un URL "diverso", che sarebbe lo stesso URL ma con il parametro GET in esso .

Ad esempio:
http://example.com -> aggiornerà
http://example.com?refresh=no -> non si aggiornerà

Se non vuoi l'URL disordinato, includerei un po 'di PHP all'inizio del corpo che fa eco a un valore nascosto che essenzialmente dice se il parametro POST necessario per non aggiornare la pagina è stato incluso nella richiesta della pagina iniziale. Subito dopo, includeresti alcuni JS per controllare quel valore e aggiornare la pagina CON quelle informazioni POST, se necessario.


0

Prova con questo

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

0

Prova con il codice qui sotto

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

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

    return;
    }
});

0
        var foo = true;
        if (foo){
            window.location.reload(true);
            foo = false;

        }

0

Usa questo

<body onload =  "if (location.search.length < 1){window.location.reload()}">

0

Ecco un'altra soluzione con setTimeout, non perfetta, ma funziona:

Richiede un parametro nell'URL corrente, quindi l'immagine dell'URL corrente avrà questo aspetto:

www.google.com?time=1

Il codice seguente fa ricaricare la pagina solo una volta:

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

La risposta accettata utilizza la minima quantità di codice ed è facile da capire. Ho appena fornito un'altra soluzione a questo.

Spero che questo aiuti gli altri.


-1

Usa rel = "external" come di seguito è l'esempio

<li><a href="index.html" rel="external" data-theme="c">Home</a></li>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.