44 votes

Rechargement de la page en Javascript

Afin de recharger la page sans recharger complètement tout ce que j'utilise :

window.top.location=window.top.location;

Cependant, pour une raison quelconque, cela ne fonctionne pas lorsqu'il y a du texte d'ancrage. Il semble que cela ne fasse rien dans ce cas, mais il est plus probable que cela rafraîchisse l'ancre.

Y a-t-il une solution pour recharger la page (comme ci-dessus) sans recharger les images et scripts en cache ?

74voto

icktoofay Points 60218

Essayez d'utiliser location.reload(false) .

Comme le dit MDN le second paramètre est un booléen indiquant s'il faut contourner le cache ou non. false continue à utiliser le cache, comme vous le souhaitiez.

6voto

Mike Samuel Points 54712

Icktoofay explique la solution de contournement, je ne fais donc que répondre à cette question :

Cependant, pour une raison quelconque, cela ne fonctionne pas lorsqu'il y a du texte d'ancrage. Il semble que cela ne fasse rien dans ce cas, mais il est plus probable que cela rafraîchisse l'ancre.

Le HTML 5 décrit les Localisation interface qui couvre l'affectation à document.location .

Lorsque la méthode assign(url) est invoquée, l'UA doit résoudre l'argument, relativement à l'URL de base de l'entrée script, et si cela réussit, doit faire naviguer le contexte de navigation vers l'url spécifiée.

Ainsi, l'opération de navigation ne voit qu'une URL absolue. Il n'y a donc aucune différence entre l'attribution d'un simple fragment et l'attribution d'une URL absolue identique à l'URL de la page avec un fragment.

naviguer sur

8 Identificateurs de fragments : Appliquer l'algorithme de l'analyseur d'URL à l'URL absolue de la nouvelle ressource et à l'adresse du document actif du contexte de navigation dans lequel on navigue. Si tous les composants des URLs analysés résultants, en ignorant les composants des fragments, sont identiques et que la nouvelle ressource doit être extraite au moyen de la méthode HTTP GET ou d'une méthode équivalente, et que l'URL analysée de la nouvelle ressource comporte un composant de fragment qui n'est pas nul (même s'il est vide), puis naviguer vers cet identifiant de fragment et annulez ces étapes.

Enfin, naviguer vers un identifiant de fragment dit

Lorsque l'agent utilisateur doit faire défiler le document jusqu'à l'identifiant du fragment, il doit soit modifier la position de défilement du document à l'aide de l'algorithme de défilement d'un élément dans la vue défini dans la spécification CSSOM View, avec l'indicateur d'alignement sur le haut activé, soit effectuer une autre action, de sorte que la partie indiquée du document soit portée à l'attention de l'utilisateur.

4voto

Joseph Myers Points 3267

La meilleure façon d'être totalement sûr que la page elle-même est rechargée, mais que les autres éléments mis en cache ne le sont pas, est de modifier la chaîne de requête location.search avec un paramètre aléatoire.

Par exemple,

location.search='?'+Math.random();

Le cache n'est pas contourné, de sorte que tous les éléments de la page seront chargés à partir du cache, mais la page principale elle-même est obligée de se recharger parce que le protocole HTTP exige une autre requête au serveur pour chaque chaîne de requête unique / valeur location.search.

Si votre page est elle-même une application qui utilise une chaîne d'interrogation (comme file.cgi?param=xyz&param2=abc...), vous devrez compléter la chaîne d'interrogation plutôt que de la remplacer complètement :

if (location.search.length > 1)
location.search+='&'+Math.random();
else
location.search='?'+Math.random();

0voto

Roger Points 1

J'ai essayé toutes ces solutions pour la situation suivante : J'ai une page compliquée avec un minicart où le client peut enregistrer des projets avec des listes de produits. Maintenant, je voulais laisser le client ouvrir une nouvelle page pour télécharger un rapport tout en gardant la page parente intacte avec un accordéon ouvert, etc.

Les clients disposant d'IE8 et utilisant encore XP voyaient la page parentale se brouiller après l'ouverture de la fenêtre de rapport. La programmation était en ASP.NET avec du code VB derrière. Cette solution a fonctionné pour moi.

Dim proj As String = "<script language=javascript> location.assign('/Projects.aspx');
window.open('Report.aspx?project=" & projid.Text & "&rpt=bill');</script>"
Session.Add("AddCart", idx.ToString("N0"))
Response.Write(proj)

location.assign est utilisé pour rafraîchir la page mère tandis que window.open ouvrira le rapport dans une nouvelle fenêtre.

Une variable de session est utilisée pour garder la trace de la rangée de l'accordéon qui doit être ouverte. Ceci est géré dans Page_Load

    If Not Page.IsPostBack Then
        LoadProjects()
        If Session("AddCart") IsNot Nothing Then
            Dim idx As Integer = Session("AddCart")
            ProjAccordion.SelectedIndex = idx
            Session.Remove("AddCart")
        ElseIf Session("CopyProj") IsNot Nothing Then
            Dim idx As Integer = Session("CopyProj")
            ProjAccordion.SelectedIndex = idx
            Session.Remove("CopyProj")
        End If
    End If

-2voto

Dmitriy R Points 36

L'utilisation de location.href fait l'affaire http://www.w3schools.com/jsref/prop_loc_href.asp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X