web-dev-qa-db-fra.com

Javascript: Comment vraiment recharger un site avec une balise d'ancrage?

Prenez cet extrait de code par exemple:

window.location.href = 'mysite.htm#images';

Déjà sur le site mysite.htm et déclencher le rechargement par location.href ne rechargera pas la page mais passera à l'ancre nommée dans l'URL.

J'ai besoin d'un mécanisme pour vraiment recharger la page. Des idées?

PS: j'ai essayé les autres méthodes de localisation mais aucune d'elles ne fait l'affaire :(

MODIFIER
Ne vous accrochez pas au type de fichier htm. J'en aurais également besoin pour les sites dynamiques.

29
aefxx

Après avoir défini l'URL spécifiée dans l'emplacement, exécutez window.location.reload(true). Cela forcera le navigateur à recharger la page.

56
alemjerus

utilisez la partie requête de l'URL pour ajouter une chaîne aléatoire:

// Use a timestamp to make sure the page is always reloaded
window.location.href = 'mysite.htm?r='+(+new Date())+'#images';
8
Andy E

Bien que je pense que la réponse d'Alemjerus est dans la bonne direction, cela ne fonctionne pas lorsque la nouvelle URL pointe vers une page différente, au moins sur mon Chrome v40.

Par exemple, lorsque la nouvelle URL ajoute simplement une ancre, cela fonctionne très bien:

var redirectToURL = '/questions/2319004/javascript-how-to-truly-reload-a-site-with-an-anchor-tag#answer-28621360';
window.location.href = redirectToURL;
window.location.reload(true);

Mais lorsqu'il pointe vers une page différente, l'utilisateur restera toujours sur la page actuelle après le rechargement. (Exécutez les codes suivants dans un lot, sans délai entre location.href= et location.reload):

var redirectToURL = 'http://stackoverflow.com';
window.location.href = redirectToURL;
window.location.reload(true);

Dans ce cas, supprimez le location.reload travaux. Ma solution consiste donc à vérifier si la nouvelle URL se trouve sur la même page:

var urlParser = document.createElement('a');
urlParser.href = redirectToURL;
if (urlParser.Origin + urlParser.pathname === location.Origin + location.pathname) {
    window.location.reload(true);
}

Testé sur Chrome et Safari, n'ont pas essayé IE. Veuillez me faire savoir si cela ne fonctionne pas sur un navigateur majeur.

4
ZZY

Vous pouvez être un tricheur et ajouter une chaîne de requête aléatoire, redirigeant vers "mysite.htm? Random = 289954034 # images".

Mais s'il s'agit d'une page statique, comme .htm implique, pourquoi avez-vous besoin de recharger? Si c'est pour que votre Javascript onload puisse se produire une deuxième fois, il vous suffit peut-être de modifier le flux de votre application.

3
Matchu

Essaye ça: window.location.href = 'mysite.htm?';

EDIT: Cela ne fonctionnera que la première fois; après cela, la mise en cache prend de nouveau effet.

1
Cameron