Использование 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, поэтому любезно сделайте свой ответ объяснительным. Спасибо.

398   11  

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.length

EDIT:некоторые браузеры начинают свою историю с 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\">&laquo;Go back</a></p>";

вернуться на одну страницу.

echo "<p><a href=\"javascript:history.go(-2)\" title=\"Return to previous page\">&laquo;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

    Ничего не найдено.