Einmalige Seitenaktualisierung nach dem Laden der ersten Seite


84

Ich möchte einen JavaScript-Code implementieren, der Folgendes besagt: Wenn die Seite vollständig geladen ist, aktualisieren Sie die Seite sofort, jedoch nur einmal. Ich stecke beim "nur einmal" fest:

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

Dies ergibt eine Schleife ohne das "nur einmal". jQuery wird geladen, wenn dies hilft.


1
Was erreichen Sie durch das Neuladen der Seite? Möglicherweise gibt es einen besseren Weg, um das Problem zu lösen.
FishBasketGordo

Auf der Seite beginnt ein JQuery-Vollbild-Galerieskript, aber die Daumen werden nie vollständig geladen. Wenn Sie auf die Schaltfläche "Aktualisieren" für die Seite klicken, werden nur die verbleibenden geladen. Es ist also klar, dass ich nach einer Problemumgehung suche. Es ist zu kompliziert, die Daumen separat zu geben (CMS), andere Bugfixes haben dies nicht getan Es hilft nicht wirklich ... Es sind ca. 4 MB Bilder. Jeweils 300 KB, irgendwann werden die Daumen der Bilder nicht mehr in der Größe geändert und angezeigt (Zeitüberschreitung? Zu viel, zu groß?), Aber die Seite wird vollständig geladen.
Martin

Bei der Verwendung von pjax pjax.heroku.com ist ein ähnliches Problem aufgetreten (Javascripts funktionieren nicht) .
Pratik Khadloya

Antworten:


96

Ich würde sagen, benutze Hash wie folgt:

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

ja. Ich wollte das nur vorschlagen.
p3drosola

Ja, ähnlich wie mein Vorschlag, einen $ _GET-Parameter zu verwenden, aber etwas einfacher, da der Zugriff auf den Hash in JS einfacher ist als der Zugriff auf den $ _GET-Parameter ...
maxedison

4
Dies ist am einfachsten, solange die URLs noch keine Hashes enthalten. In diesem Fall wäre es besser, einen GET-Parameter zu lesen.
David

Wie können Sie dies tun, ohne die URL anzuhängen?
zero_cool

clevere Lösung! Liebe es! ❤
anu

43

Wenn ich auf dieses Problem stoße, suche ich hier, aber die meisten Antworten versuchen, die vorhandene URL zu ändern. Hier ist eine weitere Antwort, die für mich mit localStorage funktioniert.

<script type='text/javascript'>

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

</script>

Kreative Lösung.
JoJo

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>

Aufgrund der if-Bedingung wird die Seite nur einmal neu geladen. Ich hatte auch dieses Problem und als ich suchte, fand ich diese nette Lösung. Das funktioniert bei mir gut.


9

Überprüfen Sie diesen Link. Er enthält einen Java-Skript-Code, mit dem Sie Ihre Seite nur einmal aktualisieren können

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

Es gibt mehrere Möglichkeiten, Ihre Seite zu aktualisieren:

Lösung1 :

Um eine Seite bei jedem Öffnen einmal zu aktualisieren, verwenden Sie:

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

Dann ändern Sie Ihre zu sagen

<Body onLoad=" LoadOnce()" >

Lösung3:

response.setIntHeader("Refresh", 1);

Diese Lösung aktualisiert die Seite jedoch mehr als einmal, abhängig von der von Ihnen angegebenen Zeit

Ich hoffe das wird dir helfen


3

Ich habe dies in meine Kopf-Tags der Seite eingefügt, auf der ich ein einzelnes Reload durchführen möchte:

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

Der Wert "mc" kann auf einen beliebigen Wert eingestellt werden, beide müssen jedoch in den beiden Zeilen übereinstimmen. und das "= mobile" kann "= alles sein, was Sie wollen" sein, es benötigt nur einen Wert, um die Aktualisierung zu stoppen.


3

Endlich habe ich nach zwei Monaten Recherche eine Lösung zum erneuten Laden der Seite gefunden.

Es funktioniert gut auf meinem clientseitigen JS-Projekt.

Ich habe eine Funktion geschrieben, die unten nur einmal Seite neu lädt.

1) Zuerst die Domloading-Zeit des Browsers abrufen

2) Aktuellen Zeitstempel abrufen

3) Browser-Domloading-Zeit + 10 Sekunden

4) Wenn die Domloading-Zeit des Browsers + 10 Sekunden länger als der aktuelle Zeitstempel ist, kann die Seite über "reloadPage ()" aktualisiert werden.

Wenn es jedoch nicht größer als 10 Sekunden ist, bedeutet dies, dass die Seite nur neu geladen wird, sodass sie nicht wiederholt neu geladen wird.

5) Wenn Sie daher "reloadPage ()" aufrufen; Die Funktion an einer beliebigen Stelle in Ihrer js-Dateiseite wird nur einmal neu geladen.

Hoffe das hilft jemandem

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

2
<script>

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

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

</script>

das funktioniert perfekt


Hinweis: 1000 bedeutet 1 Sekunde, dass Sie es auf beliebige Zeitintervalle einstellen können.
Godwin Tommy

Tolle einfache Lösung, danke dafür.
dodgy_coder

1

Nach dem </body>Tag:

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

0

Sie müssten entweder GET- oder POST-Informationen verwenden. GET wäre am einfachsten. Ihr JS würde die URL überprüfen, wenn ein bestimmter Parameter nicht gefunden würde, würde er nicht nur die Seite aktualisieren, sondern den Benutzer an eine "andere" URL senden, die dieselbe URL wäre, aber den GET-Parameter enthält .

Beispiel:
http://example.com -> wird aktualisiert
http://example.com?refresh=no -> wird nicht aktualisiert

Wenn Sie die unordentliche URL nicht möchten, würde ich direkt am Anfang des Textes PHP einfügen, das einen versteckten Wert wiedergibt, der im Wesentlichen angibt, ob der erforderliche POST-Parameter zum Nicht-Aktualisieren der Seite in der anfänglichen Seitenanforderung enthalten war. Unmittelbar danach würden Sie JS einfügen, um diesen Wert zu überprüfen und die Seite MIT diesen POST-Informationen bei Bedarf zu aktualisieren.


0

Versuchen Sie es damit

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

0

Bitte versuchen Sie es mit dem folgenden Code

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

benutze das

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

0

benutze window.localStorage ... so

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

Es ist Arbeit für mich


0

Hier ist eine andere Lösung mit setTimeout, die nicht perfekt ist, aber funktioniert:

Es erfordert einen Parameter in der aktuellen URL, also sehen Sie sich die aktuelle URL wie folgt an:

www.google.com?time=1

Mit dem folgenden Code wird die Seite nur einmal neu geladen:

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

Die akzeptierte Antwort verwendet die geringste Menge an Code und ist leicht zu verstehen. Ich habe gerade eine andere Lösung dafür bereitgestellt.

Hoffe das hilft anderen.


-1

Verwenden Sie rel = "external" wie unten ist das Beispiel

<li><a href="index.html" rel="external" data-theme="c">Home</a></li>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.