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?

Tyilo
źródło

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.

Markus Amalthea Magnuson
źródło
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.

Simon Molloy
źródło
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>
Vinay Sahni
źródło
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.

Stephen
źródło
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>
Hatzegopteryx
źródło
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>
kaushik
źródło
9
<a href=".">refresh current page</a>

lub jeśli chcesz przekazać parametry:

<a href=".?curreny='usd'">refresh current page</a>
Abie Abby Del Ray
źródło
7

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

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

Thomas Shields
źródło
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.

Michael Walsh
źródło
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.

John Henckel
źródło
@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
3

Spróbuj tego

<a href="javascript:window.location.href=window.location.href">
Kocham Kumara
źródło
i gdzie wstawiasz #?
FlowUI. SimpleUITesting.com
@ iOSCalendarpatchthecode.com dlaczego chcesz wstawić # ?? to służy do ponownego załadowania strony.
Love Kumar
zignoruj ​​mój komentarz. Popełniłem błąd.
FlowUI. SimpleUITesting.com
2

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

<a href="?">link</a>
znak
źródło
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>
SashaPinsk
źródło
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.

Tarun
źródło
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>
David Villa
źródło
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ść.

Tim Bray
źródło
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)

Ayush Kumar
źródło
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://

Spoke
źródło
-2

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

Pramodh
źródło
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>
Andrzej
źródło
-4

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

ciccio
źródło
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,