Использование Javascript: как создать ссылку "вернуться", которая приведет пользователя к ссылке, если для вкладки или окна нет истории?
EDIT-2: ни один из ответов, кажется, работает. Даже не тот, который я ранее отметил как ответ на этот вопрос. Любая помощь приветствуется. Спасибо.
во-первых, я погуглил для инструкции по созданию ссылки "вернуться", которая позволяет пользователю вернуться на предыдущую страницу, и это два способа сделать это:
<a href="javascript:history.go(-1)">[Go Back]</a>
и...
<a href="#" onclick="history.go(-1);return false;">[Go Back]</a>
какой из этих двух лучше? И почему? (Кроме того, пожалуйста, пролить свет о совместимости браузера.)
Это одна половина вопроса. Теперь, если моя первая страница, которую посещает пользователь, ссылка "вернуться" не будет работать, верно? (Так как нет уже существующей истории для окна или вкладки.) В этом случае, я хочу, чтобы ссылка на запасной вариант и принять пользователя кhttp://example.com.
т. е. если история существует, пользователь переходит на предыдущую страницу, а если нет, то он переходит http://example.com.
Как мне это сделать? Надеюсь, кто-то может помочь.
EDIT: обратите внимание, что я не знаю JavaScript, поэтому любезно сделайте свой ответ объяснительным. Спасибо.
11 ответов:
Регистрация
window.history.lengthкак он содержит количество страниц, которые вы посетили в общей сложности в данной сессии:
window.history.length(целое число)только для чтения. Возвращает количество элементов в истории сеанса, включая текущую загруженную страницу. Например, для страницы, загруженной в новую вкладку, это свойство возвращает 1. Цитата 1
допустим, пользователь посещает вашу страницу, нажимает на некоторые ссылки и идет назад:
www.mysite.com/index.html <-- first page and now current page <----+ www.mysite.com/about.html | www.mysite.com/about.html#privacy | www.mysite.com/terms.html <-- user uses backbutton or your provided solution to go backтеперь
window.history.length- это 4. Вы не можете пройти через элементы истории из-за соображений безопасности. В противном случае on может прочитать историю пользователя и получить его идентификатор сеанса онлайн-банкинга или другую конфиденциальную информацию.вы можете установить тайм-аут, который позволит вам действовать, если предыдущая страница не загружается в данный момент времени. Однако, если пользователь имеет медленное подключение к Интернету и тайм-аут должен быть коротким, этот метод перенаправит его к вашему умолчанию расположение все время:
window.goBack = function (e){ var defaultLocation = "http://www.mysite.com"; var oldHash = window.location.hash; history.back(); // Try to go back var newHash = window.location.hash; /* If the previous page hasn't been loaded in a given time (in this case * 1000ms) the user is redirected to the default location given above. * This enables you to redirect the user to another page. * * However, you should check whether there was a referrer to the current * site. This is a good indicator for a previous entry in the history * session. * * Also you should check whether the old location differs only in the hash, * e.g. /index.html#top --> /index.html# shouldn't redirect to the default * location. */ if( newHash === oldHash && (typeof(document.referrer) !== "string" || document.referrer === "") ){ window.setTimeout(function(){ // redirect to default location window.location.href = defaultLocation; },1000); // set timeout in ms } if(e){ if(e.preventDefault) e.preventDefault(); if(e.preventPropagation) e.preventPropagation(); } return false; // stop event propagation and browser default event }<span class="goback" onclick="goBack();">Go back!</span>отметим, что
typeof(document.referrer) !== "string"важно, так как поставщики браузеров могут отключить реферер из соображений безопасности (хэши сеансов, пользовательские URL-адреса GET). Но если мы обнаружим реферер, и он пуст, это, вероятно, сохранить сказать, что нет предыдущей страницы (см. Примечание ниже). Тем не менее, может быть какая-то странная причуда браузера, поэтому безопаснее использовать тайм-аут, чем использовать простое перенаправление.EDIT: не использовать
<a href='#'>...</a>, а это добавит еще одну запись в журнале сеанса. Лучше использовать<span>или какой-то другой элемент. Обратите внимание, чтоtypeof document.referrerвсегда"string"и не пустой, если ваша страница находится внутри (i)кадра.Читайте также:
Регистрация
window.history.lengthили простоhistory.lengthEDIT:некоторые браузеры начинают свою историю с 0, другие с 1. отрегулируйте соответственно.
если он имеет значение 1, это означает, что это первая страница в этом окне / вкладке-тогда вы можете перенаправить JS.
<script> function backAway(){ //if it was the first page if(history.length === 1){ window.location = "http://www.mysite.com/" } else { history.back(); } } </script> <a href="#" onClick="backAway()">Back</a>
оба будут работать одинаково, его просто два разных метода для вызова одной и той же функции. Попробуйте следующее:
<a href="javascript:history.back();">[Go Back]</a>
причина при использовании
return:false;хорошо объясняется на этом другой вопрос.для другой проблемы, вы можете проверить для реферер чтобы увидеть, если она пуста:
function backAway(){ if (document.referrer == "") { //alternatively, window.history.length == 0 window.location = "http://www.example.com"; } else { history.back(); } } <a href="#" onClick="backAway()">Back Button Here.</a>
echo "<p><a href=\"javascript:history.go(-1)\" title=\"Return to previous page\">«Go back</a></p>";вернуться на одну страницу.
echo "<p><a href=\"javascript:history.go(-2)\" title=\"Return to previous page\">«Go back</a></p>";вернемся на две страницы.
это, кажется, сделать трюк:
function goBackOrGoToUrl() { window.history.back(); window.location = "http://example.com"; }история звонков.назад() , а затем изменить местоположение. Если браузер сможет вернуться в историю, он не сможет перейти к следующему заявлению. Если он не может вернуться, он отправится в указанное место.
следующий код сделал трюк для меня.
html:
<div class="back" onclick="goBackOrGoHome()"> Back </div>js:
home_url = [YOUR BASE URL]; pathArray = document.referrer.split( '/' ); protocol = pathArray[0]; host = pathArray[2]; url_before = protocol + '//' + host; url_now = window.location.protocol + "//" + window.location.host; function goBackOrGoHome(){ if ( url_before == url_now) { window.history.back(); }else{ window.location = home_url; }; }Итак, вы используете
document.referrerчтобы установить домен страницы, с которой Вы пришли. Затем вы сравниваете это с вашим текущим url с помощьюwindow.location.если они из одного домена, это означает, что вы приходите с вашего собственного сайта, и вы отправляете их
window.history.back(). Если они не совпадают, вы приходите откуда-то еще, и вы должны перенаправить домой или делать все, что вы как.
добавлен новый ответ для отображения кода в формате:
дело в том, что вы проверяли документы.реферер, потому что вы были в ff, он всегда возвращался true, а затем переходил к http://mysite.com. попробуйте следующее:
function backAway(){ if (document.referrer) { //firefox, chrome, etc.. i = 0; } else { // under ie i = 1; } if (history.length>i) { // there are items in history property history.back(); } else { window.location = 'http://www.mysite.com/'; } return false; }
просто используйте куки для хранения списка посещенных страниц.
и если еще.
EDIT: также используйте ServerVariables HTTP_REFERER.
вы должны проверить оба
document.referrerиhistory.lengthкак в моем ответе на аналогичный вопрос здесь:https://stackoverflow.com/a/36645802/1145274
Как насчет использования функции замены истории, чтобы добавить сайт в историю браузеров?
попробуйте выполнить следующее, Как только окно загрузится-
history.replaceState("example", "title", "http://www.example.com");это должно, надеюсь, сделать это так, даже если это первая страница, к которой они обратились, URL, который вы определяете в коде, будет тем, что они принимают, когда они нажимают назад.
Comments