Link do przeładowania bieżącej strony


175

Czy można mieć zwykłe łącze wskazujące bieżącą lokalizację?

Obecnie znalazłem 2 rozwiązania, ale jedno z nich zawiera JavaScript, aw drugim musisz znać bezwzględną ścieżkę do strony:

<a href="#" onclick="window.location.reload(true);">1</a>
<a href="/foobar/">2</a>
<a href="#">3 (of course not working)</a>

Czy można to zrobić bez użycia JavaScript lub znajomości bezwzględnej ścieżki?

Odpowiedzi:


198

Używałem:

<a href=".">link</a>

Nie znalazłem jeszcze przypadku i / lub przeglądarki, w której nie działa zgodnie z przeznaczeniem.

Okres oznacza aktualną ścieżkę. Możesz również ..odwołać się do folderu powyżej bieżącej ścieżki, na przykład, jeśli masz taką strukturę plików:

page1.html
folder1
    page2.html

Możesz wtedy page2.htmlnapisać:

<a href="../page1.html">link to page 1</a>

EDYTOWAĆ:

Nie jestem pewien, czy zachowanie się zmieniło, czy zawsze tak było, ale Chrome (i być może inne) potraktuje okresy opisane powyżej jako dotyczące katalogów , a nie plików. Oznacza to, że jeśli jesteś w http://example.com/foo/bar.html, naprawdę jesteś w katalogu /foo/i będzie się odnosić hrefwartość .inbar.html/foo/ zamiastbar.html

Pomyśl o tym jak o nawigacji w systemie plików w terminalu; nigdy nie możeszcd do pliku :)

EDYCJA 2:

Wygląda na to, że zachowanie podczas używania href="."nie jest już tak przewidywalne, zarówno Firefox, jak i Chrome mogły zmienić sposób, w jaki sobie z nimi radzą. Nie polegałbym całkowicie na mojej pierwotnej odpowiedzi, ale raczej wypróbuj zarówno pusty ciąg, jak i kropkę w różnych przeglądarkach do konkretnego użytku i upewnij się, że uzyskasz pożądane zachowanie.


25
Należy jednak zauważyć, że dane GET nie są zachowywane tą metodą, traktuj to jako „twarde przeładowanie”. Użycie pustej wartości href zachowa dane GET, ale wyczyści wartość skrótu (np. #These). Używając # lub? as href doda „śmieci” do nowego adresu URL. Odkryłem, że używanie kropki to najczystszy sposób na przeładowanie.
Markus Amalthea Magnuson

5
Ta technika nie działa dla mnie na Mac Chrome. Chociaż używasz „.” jako anhor, zachowuje się tak, jakby „..” i odsyłacze do strony nadrzędnej. np. / admin / stuff staje się / admin. Czy ktoś jeszcze widział takie zachowanie?
Zac

3
To rozwiązanie jest złe. Również w Chrome nie działa i wskazuje katalog nadrzędny. Powinieneś użyć pustego href, jak sugeruje
@MarkusAmaltheaMagnuson

8
Wydaje się, że działa to tylko wtedy, gdy składnik ścieżki adresu URL kończy się na /.
Kos

6
Na dzień dzisiejszy nie działa to w przeglądarce Firefox ani Chrome. Obie przeglądarki odwołują się do katalogu nadrzędnego (nie do bieżącej strony), używając href = "."
jtubre

135

Żadna z pozostałych odpowiedzi nie będzie przewidywała żadnych kwestionowanych wartości. Próbować

<a href="javascript:window.location.href=window.location.href">

Trzeba przyznać, że dotyczy to javascript, ale jeśli użytkownicy nie mają wyłączonego skryptu, jest to całkiem proste.


5
U mnie nie działa (Google Chrome 32). Wolę <a href="javascript:location.reload();"> </a>
Gabriel,

3
Używam Google Chrome 36.0.1985 i javascript: window.location.href = window.location.href działa. location.reload () ma niefortunny skutek, ponieważ pyta użytkownika, czy chce odświeżyć stronę w przeglądarce Firefox i, w zależności od scenariusza, może nie zapewnić pożądanego wyniku. Więcej dyskusji znajdziesz na stackoverflow.com/questions/2405117/ ...
Simon Molloy,

1
Używam kątowego z routingiem. To nie zadziałało dla mnie. Jednak to działa -> <a href="javascript:"> click me </a>
John Henckel

Co jeśli js jest wyłączony?

5
To rozwiązanie nie zachowuje kotwic
thomas.winckell

77

W jedną stronę za pomocą javascript:

<a href="javascript:window.location.reload(true)">Reload</a>

4
Zachowuje querystrings i anchors ( ?query=string#anchor). Wspaniały!
analog-nico

Skończyło się na użyciu tej odpowiedzi, ponieważ pozycja przewijania jest również zachowana. Przydatne, jeśli używasz przeładowania jako pseudo przycisku „cofnij”.
igneozaur

To rozwiązanie DZIAŁA na kliencie React
Andrius

czy mógłbyś wyjaśnić, jak używać tego w składni html?
Joanna Mikalai

Mam pytanie, czy ten trueparametr naprawdę jest tym, z czym należy się udać w przypadku tego problemu stosując window.location.reloadmetodę? To sprawi, że będzie to trudne odświeżanie, które pozwala uniknąć pobierania z pamięci podręcznej, co może być tym, czego chcesz w pewnych okolicznościach, ale myślę, że w większości sytuacji chciałbyś skorzystać z pamięci podręcznej, prawda?
Stephen M Irving

31

Możesz to zrobić: <a href="">This page</a>

ale nie sądzę, że zachowuje dane GET i POST.


3
Niestety nie działa w IE. Od: msdn.microsoft.com/en-us/library/cc848861%28v=vs.85%29.aspx - Jeśli parametr HREF jest określony jako pusta wartość (href = "" lub href =), uruchomienie łącza może spowodować wyświetlenie katalog zawierający bieżący dokument lub może generować błąd, w zależności od innych elementów w dokumencie i środowiska serwera.
Bohdan Lyzanets

12
<a href="<?php echo $_SERVER["REQUEST_URI"]; ?>">Click me</a>

12
Nie używam PHP.
Tyilo

3
Zauważyłem -1, może nie być rozwiązaniem w twoim przypadku (ponieważ jest to rozwiązanie php), ale myślę, że jest to najczystsze rozwiązanie tutaj. To dlatego, że nadaje prawidłową wartość atrybutowi href, jest najczystszy. Jeśli to możliwe, unikaj javascript. Więc +1.
rofavadeka

bardzo pomocny. Dlaczego to się kciuka w dół? Oryginalne pytanie również nie wspomina o js, ​​a większość q tutaj odnosi się do JS ...
Andrew

@Andrew, oryginalne pytanie jest oznaczone tagami #html i #hyperlink. Chociaż trzeba przyznać, że „normalny odsyłacz do bieżącej lokalizacji” jest niewiarygodnie niejasnym opisem, jestem prawie pewien, że można go rozsądnie zinterpretować jako szukanie rozwiązania tylko po stronie klienta. Kotwica, w której href jest wypełniana przez PHP, nie jest „normalnym łączem” w żadnym odcinku, jest to kod PHP.
endemiczny

@endemic Sugerowanie, że javascript jest "normalne", a php nie jest bezcelową opinią. OP faktycznie definiuje normalne jako nie zawierające javascript i nie używające ścieżki bezwzględnej. Co ciekawe, większość odpowiedzi jest w javascript.
Andrew

10

użyj tego do przeładowania / odświeżenia bieżącej strony

<a href="#" onclick="window.location.reload(true);">

albo użyj

<a href="">refresh</a>

9
<a href=".">refresh current page</a>

lub jeśli chcesz przekazać parametry:

<a href=".?curreny='usd'">refresh current page</a>

7

<a href="https://stackoverflow.com/">Clicking me refreshes the page</a>

<a href="?">Click Me To Reload the page</a>


3
działa to tylko wtedy, gdy jesteś w index.html lub innym głównym dokumencie / adresie URL
Stephen

@ Stephen oczywiście. Masz w zasadzie rację. Najwyraźniej jestem bardziej zardzewiały niż myślałem. Właśnie przetestowałem to naprawdę szybko i znalazłem się na rootowaniu.
Thomas Shields

Działa bardzo dobrze, gdy adres URL to np. / blablabla podczas gdy. przywróci mi korzenie.
Augustin Riedinger,

6

Nie ma niestety globalnego sposobu na zrobienie tego, używając tylko HTML. Możesz spróbować, <a href="">test</a>ale działa to tylko w niektórych przeglądarkach.


Nie działa w IE. Od: msdn.microsoft.com/en-us/library/cc848861%28v=vs.85%29.aspx - Jeśli parametr HREF jest określony jako pusta wartość (href = "" lub href =), uruchomienie łącza może spowodować wyświetlenie katalog zawierający bieżący dokument lub może generować błąd, w zależności od innych elementów w dokumencie i środowiska serwera.
Bohdan Lyzanets

1
Przetestowałem i działa we wszystkich głównych nowoczesnych przeglądarkach (Chrome, Firefox, Edge, Opera, Safari)
Kaczor Donald

5

Całkowicie idempotentny adres URL, który zachowuje ścieżkę, parametry i kotwicę.

 <a href="javascript:"> click me </a>

wykorzystuje tylko odrobinę JS.

EDYCJA: to nie powoduje przeładowania strony. To link, który nic nie robi.


@FranciscoCorralesMorales, przepraszam, ale myślę, że źle zrozumiałem pytanie. Myślałem, że OP próbował utworzyć łącze, które nic nie robi. Ale teraz widzę, że OP chce linku, który przeładuje bieżącą stronę. (Będę edytować).
John Henckel

Dziękujemy za ten fragment kodu, który może zapewnić natychmiastową pomoc. Właściwe wyjaśnienie znacznie poprawiłoby jego wartość edukacyjną, pokazując, dlaczego jest to dobre rozwiązanie problemu, i uczyniłoby go bardziej użytecznym dla przyszłych czytelników z podobnymi, ale nie identycznymi pytaniami. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnienie, i dać wskazówkę co zastosować ograniczenia i założenia.
Toby Speight


2

Chociaż zaakceptowana odpowiedź nie działała dla mnie w IE9, to:

<a href="?">link</a>

1
Nie sądzę, że to zadziała, jeśli chcesz zachować parametry zapytania.
WynandB

1
@WynandB ma rację. spowoduje to usunięcie wszystkich parametrów GET i POST. jeśli tego chcesz, lub jeśli cię to nie obchodzi, ta sztuczka działa świetnie.
hanshenrik

2

Jeszcze jedno rozwiązanie

<a href="javascript:history.go(0)">Reload</a>

Dobre rozwiązanie! Jedna drobna wskazówka dotycząca tej metody brzmi: 0 to domyślny parametr, więc jeśli próbujesz przeładować, możesz po prostu napisać: history.go()bez argumentów.
Stephen M Irving

2
<a href="">Refresh!</a>

Pozostaw href=""puste, a odświeży stronę.
Działa również, jeśli niektóre informacje są przekazywane za pomocą formularzy.


0

Używam JS, aby pokazać tylko div z określonym identyfikatorem na stronie tagów w witrynie Jekyll. Z zestawem linków na tej samej stronie, pokazujesz odpowiedni element:

function hide_others() {
    $('div.item').hide();
    selected = location.hash.slice(1);
    if (selected) {
        $('#' + selected).show();
    }
    else {
    $('div.item').show();
    }
}

linki używają linków takich jak:

<a href="javascript:window.location.href='/tags.html#{{ tag[0] }}-ref'; hide_others()">{{ tag[0] }}</a>

0

Możesz użyć formularza, aby wykonać POST pod tym samym adresem URL.

 <form  method="POST" name="refresh" id="refresh">
 <input type="submit" value="Refresh" />
 </form>

To daje przycisk, który odświeża bieżącą stronę. Jest to trochę denerwujące, ponieważ jeśli użytkownik naciśnie przycisk odświeżania przeglądarki, otrzyma do you want to resubmit the formwiadomość.


0

UŻYWAM HTML DO ROZWIĄZANIA TEGO PROBLEMU
Użyj:

<a href="page1.html"> Link </a>

* page1.html -> wpisz nazwę pliku, nad którym pracujesz (aktualny plik HTML)


Proszę edytować post. Nie jest jasne, jakiego języka programowania używasz, w jaki sposób próbowałeś zaimplementować kod i tak dalej.
Roee Anuar

Do wykonania tego zadania użyłem języka HTML .
Ayush Kumar

-1
<a href="/">Same domain, just like refresh</a>

Wydaje się, że działa tylko wtedy, gdy Twoja witryna to index.html, index.htm lub index.php (dowolna strona domyślna).

Ale wydaje się, że .to to samo i bardziej akceptowane

<a href=".">Same domain, just like refresh, (more used)</a>

Oba działają doskonale w przeglądarce Chrome, gdy domena to http://ihttps://


-2

<a href="https://stackoverflow.com/home" target="_self">Reload the page</a>


Problem polega na tym, że jeśli nie znamy
adresu

-3

Jeśli używasz szablonów php / smarty, możesz zrobić coś takiego:

<a href="{{$smarty.server.REQUEST_URI}}{if $smarty.server.REQUEST_URI|strstr:"?"}&{else}?{/if}newItem=1">Add New Item</a>

-4

Po prostu dodaj target = "_ blank", a link otworzy nową stronę, zachowując oryginalną stronę.


Jak mówisz, spowoduje to otwarcie dowolnej strony określonej w hrefatrybucie w nowym oknie / karcie. To w żaden sposób nie odpowiada na rzeczywiste pytanie.
Philip Stratford,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.