Ссылка для перезагрузки текущей страницы

175

Возможно ли иметь нормальную ссылку, указывающую на текущее местоположение?

В настоящее время я нашел 2 решения, но одно из них включает JavaScript, а в другом вы должны знать абсолютный путь к странице:

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

Есть ли способ сделать это, не используя JavaScript или не зная абсолютного пути?

Tyilo
источник

Ответы:

198

Я использовал:

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

До сих пор не найдено дело и / или браузер, где он не работает, как задумано.

Точка означает текущий путь. Вы также можете использовать ..для ссылки на папку выше текущего пути, например, если у вас есть эта файловая структура:

page1.html
folder1
    page2.html

Затем вы можете page2.htmlнаписать:

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

РЕДАКТИРОВАТЬ:

Я не уверен, изменилось ли поведение или оно всегда было таким, но Chrome (и, возможно, другие) будет обрабатывать периоды, как описано выше, в отношении каталогов , а не файлов. Это означает , что если вы на http://example.com/foo/bar.htmlвас действительно в каталоге /foo/и hrefзначение .в bar.htmlбудет относиться к , /foo/а неbar.html

Думайте об этом как о навигации по файловой системе в терминале; Вы никогда не можете cdв файл :)

РЕДАКТИРОВАТЬ 2:

Кажется, что поведение пользователей href="."больше не так предсказуемо, и Firefox, и Chrome могли изменить то, как они справляются с этим. Я бы не стал полностью полагаться на свой исходный ответ, а вместо этого попробовал бы пустую строку и точку в разных браузерах для вашего конкретного использования и убедитесь, что вы получаете желаемое поведение.

Маркус Амальтея Магнусон
источник
25
Однако следует отметить, что данные GET не сохраняются с помощью этого метода, считайте это «жесткой перезагрузкой». Использование пустого значения href сохранит данные GET, но очистит значение хеша (например, #these). Используя # или? значение href добавит «мусор» к новому URL. Я обнаружил, что использование периода является самым чистым способом перезагрузки.
Маркус Амальтея Магнусон
5
Эта техника не работает для меня на Mac Chrome. Хотя используя "." как anhor, он ведет себя как будто ".." и ссылается на родительскую страницу. например / admin / вещи становятся / admin. Кто-нибудь еще видел такое поведение?
Зак
3
Это решение неверно. Также в Chrome не работает и указывает на родительский каталог. Вы должны использовать пустой href, как подсказывает @MarkusAmaltheaMagnuson
coorasse
8
Кажется, это работает только в том случае, если компонент пути URL-адреса заканчивается на /.
Кос,
6
На сегодняшний день это не работает в Firefox или Chrome. Оба браузера ссылаются на родительский каталог (а не на текущую страницу), используя href = "."
JTubre
135

Ни один из других ответов не сохранит значения строки запроса. Пытаться

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

По общему признанию это включает javascript, но, если у ваших пользователей не отключен скрипт, это довольно просто.

Саймон Моллой
источник
5
У меня не работает (Google Chrome 32). Я предпочитаю <a href="javascript:location.reload();"> </a>
Габриэль
3
Я использую Google Chrome 36.0.1985 и javascript: window.location.href = window.location.href работает. location.reload () вызывает неудачный запрос пользователя, если он хочет обновить страницу в Firefox и, в зависимости от сценария, может не дать желаемого результата. См. Stackoverflow.com/questions/2405117/… для дальнейшего обсуждения.
Саймон Моллой,
1
Я использую угловой с маршрутизацией. Это не сработало для меня. Тем не менее, это работает -> <a href="javascript:"> click me </a>
Джон Хенкель
Что делать, если JS отключен?
5
Это решение не сохраняет якоря
thomas.winckell
77

Один из способов использования JavaScript:

<a href="javascript:window.location.reload(true)">Reload</a>
Виная Сахни
источник
4
Сохраняет строки запросов и якоря ( ?query=string#anchor). Большой!
Аналоговый Нико
Я закончил тем, что использовал этот ответ, потому что позиция прокрутки также сохранена. Полезно, если вы используете перезагрузку в качестве псевдо-кнопки «отменить».
незнакомец
Это решение работает на клиенте React
Андрюс
Не могли бы вы рассказать, как использовать это в синтаксисе HTML?
Джоанна
У меня есть вопрос, является ли trueпараметр действительно то, что вы должны пойти для этой проблемы при использовании window.location.reloadметода? Это сделает его сложным обновлением, которое позволит избежать извлечения из кэша, что может быть тем, что вам нужно при некоторых обстоятельствах, но я думаю, что в большинстве ситуаций вы захотите воспользоваться преимуществами кэша, не так ли?
Стивен М Ирвинг
31

Вы могли бы сделать это: <a href="">This page</a>

но я не думаю, что это сохраняет данные GET и POST.

Стивен
источник
3
К сожалению, это не работает в IE. От: msdn.microsoft.com/en-us/library/cc848861%28v=vs.85%29.aspx - если HREF указан как пустое значение (href = "" или href =), при выполнении ссылки может отображаться каталог, содержащий текущий документ, или он может генерировать ошибку, в зависимости от других элементов в документе и среды сервера.
Богдан Лизанец
12
<a href="<?php echo $_SERVER["REQUEST_URI"]; ?>">Click me</a>
Hatzegopteryx
источник
12
Я не использую PHP.
Tyilo
3
Заметил -1, может не быть решением в вашем случае (потому что это решение php), но я думаю, что это самое чистое решение здесь. Это потому, что он дает допустимое значение атрибуту href, он самый чистый. Если возможно, избегайте JavaScript. Итак +1.
рофавадека
Ты очень помог. Почему это плохо? В первоначальном вопросе также не упоминается js, и большинство q здесь ссылаются на JS ...
Эндрю
@ Эндрю оригинальный вопрос помечен #html и #hyperlink. Хотя по общему признанию «нормальная ссылка, указывающая на текущее местоположение», является невероятно расплывчатым описанием, я вполне уверен, что это может быть разумно истолковано как поиск решения только на стороне клиента. Якорь, где href заполняется PHP - это не «нормальная ссылка», а PHP-код.
эндемик
@endemic Предполагать, что javascript - это "нормально", а php - это не бессмысленное мнение. OP фактически определяет normal как не включающий javascript и не использующий абсолютный путь. Интересно, что большинство ответов в javascript.
Андрей
10

используйте это для перезагрузки / обновления текущей страницы

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

или использовать

<a href="">refresh</a>
Кошик
источник
9
<a href=".">refresh current page</a>

или если вы хотите передать параметры:

<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
это работает, только если вы используете index.html или другой корневой документ / URL-адрес
Стивен
@ Стефан конечно. Ты совершенно прав. Видимо я грубее чем думал. Я просто очень быстро его проверил и оказался на руте.
Томас Шилдс
Работает очень хорошо, когда URL, например. / блаблабла, тогда как. вернул бы меня к корню.
Августин Ридингер
6

К сожалению, не существует глобального способа сделать это, используя только HTML. Вы можете попробовать сделать, <a href="">test</a>однако это работает только в некоторых браузерах.

Майкл Уолш
источник
Это не работает в IE. От: msdn.microsoft.com/en-us/library/cc848861%28v=vs.85%29.aspx - если HREF указан как пустое значение (href = "" или href =), при выполнении ссылки может отображаться каталог, содержащий текущий документ, или он может генерировать ошибку, в зависимости от других элементов в документе и среды сервера.
Богдан Лизанец
1
Я тестировал и он работает во всех основных современных браузерах (Chrome, Firefox, Edge, Opera, Safari)
Дональд Дак
5

Полностью идемпотентный URL, который сохраняет путь, параметры и привязку.

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

он использует только чуть-чуть JS.

РЕДАКТИРОВАТЬ: это не перезагрузить страницу. Это ссылка, которая ничего не делает.

Джон Хенкель
источник
@FranciscoCorralesMorales, извините, но я думаю, что неправильно понял вопрос. Я думал, что ОП пытается создать ссылку, которая ничего не делает. Но теперь я вижу, что ОП хочет ссылку, которая перезагрузит текущую страницу. (Я буду редактировать).
Джон Хенкель
Спасибо за этот фрагмент кода, который может оказать некоторую немедленную помощь. Правильное объяснение значительно повысило бы его образовательную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с похожими, но не идентичными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются.
Тоби Спейт
3

попробуй это

<a href="javascript:window.location.href=window.location.href">
Люблю кумар
источник
а куда вы положили #?
FlowUI. SimpleUITesting.com
@ iOSCalendarpatchthecode.com почему вы хотите поставить # ?? это для перезагрузки страницы.
Любовь Кумара
игнорируй мой комментарий Я допустил ошибку.
FlowUI. SimpleUITesting.com
2

Хотя принятый ответ не работал для меня в IE9, он сделал:

<a href="?">link</a>
отметка
источник
1
Я не думаю, что это сработает, если вы заинтересованы в сохранении параметров строки запроса.
WynandB
1
@WynandB правильно. это уничтожит все параметры GET и POST. если это то, что вы хотите, или если вам все равно, этот трюк работает отлично, хотя.
Ханшенрик
2

Еще одно решение

<a href="javascript:history.go(0)">Reload</a>
SashaPinsk
источник
Хорошее решение! Один крошечный совет для этого метода - 0 - параметр по умолчанию, поэтому, если вы пытаетесь перезагрузить, вы можете просто написать: history.go()без аргумента.
Стивен М Ирвинг
2
<a href="">Refresh!</a>

Оставьте href=""пустым, и это обновит страницу.
Также работает, если некоторая информация передается с помощью форм.

Tarun
источник
0

Я использую JS, чтобы показать только div с определенным идентификатором на странице тегов на сайте jekyll. С набором ссылок на той же странице, вы показываете соответствующий элемент:

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

ссылки используют ссылки как:

<a href="javascript:window.location.href='/tags.html#{{ tag[0] }}-ref'; hide_others()">{{ tag[0] }}</a>
Давид Вилла
источник
0

Вы можете использовать форму, чтобы сделать POST для того же URL.

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

Это дает вам кнопку, которая обновляет текущую страницу. Это немного раздражает, потому что если пользователь нажмет кнопку обновления браузера, он получит do you want to resubmit the formсообщение.

Тим Брей
источник
0

Я ИСПОЛЬЗУЮ HTML ДЛЯ РЕШЕНИЯ ЭТОЙ ПРОБЛЕМЫ
Используйте:

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

* page1.html -> введите имя файла, над которым вы работаете (ваш текущий файл HTML)

Аюш Кумар
источник
Пожалуйста, отредактируйте пост. Непонятно, какой язык программирования вы используете, как вы пытались реализовать код и так далее.
Роу Ануар
Я использовал HTML, чтобы сделать эту задачу.
Аюш Кумар
-1
<a href="/">Same domain, just like refresh</a>

Кажется, работает, только если ваш сайт index.html, index.htm или index.php (любая страница по умолчанию).

Но похоже, что .это то же самое и более приемлемо

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

Оба работают отлично на Chrome , когда домен как http://иhttps://

SSpoke
источник
-2

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

Pramodh
источник
Проблема в том, что если мы не знаем, что url ... target = "_ self" можно опустить
Hafenkranich
-3

Если вы используете шаблоны php / smarty, вы можете сделать что-то вроде этого:

<a href="{{$smarty.server.REQUEST_URI}}{if $smarty.server.REQUEST_URI|strstr:"?"}&{else}?{/if}newItem=1">Add New Item</a>
Андрей
источник
-4

Просто добавьте target = "_ blank", и ссылка откроет новую страницу, сохраняя исходную страницу.

Ciccio
источник
Как вы говорите, это просто откроет любую страницу, указанную в hrefатрибуте в новом окне / вкладке. Это никоим образом не отвечает на фактический вопрос.
Филипп Стратфорд