window.location.href не перенаправляет

Я знаю, что этот вопрос широко обсуждается, но я не могу понять, почему он не работает для меня.

Это моя функция:

function ShowComments(){

 alert("fired");
 var movieShareId = document.getElementById('movieId');
 //alert("found div" + movieShareId.textContent || movieShareId.innerText);
 //alert("redirect location: /comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/");
 window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
 var newLocation = window.location;
 //alert("full location: " + window.location);

}

Если у меня не закомментированы оповещения или открыт Mozilla bugzilla, он работает нормально, в противном случае он не перенаправляется на другую страницу.

Есть идеи почему?

Ответ 1

Если вы вызываете эту функцию с помощью кнопки отправки. Это может быть причиной того, что браузер не перенаправляет. Он запустит код в функции, а затем отправит страницу вместо перенаправления. В этом случае измените тег типа вашей кнопки.

Ответ 4

Некоторые скобки отсутствуют.

+ Изменить

 window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";

в

 window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/";

Никакой приоритет не предоставляется || по сравнению с +.

Удалите также все после назначения window.location: этот код не должен выполняться при изменении страницы.

Примечание: вам не нужно устанавливать location.href. Этого достаточно, чтобы просто установить location.

Ответ 5

window.location.replace - лучший способ подражать переадресации:

function ShowComments(){
    var movieShareId = document.getElementById('movieId');
    window.location.replace("/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/");
}

Более подробную информацию о том, почему window.location.replace является лучшим перенаправлением javascript, можно найти здесь.

Ответ 6

Убедитесь, что вы не отправляете "#" в конце вашего URL-адреса. В моем случае это препятствовало работе window.location.href.

Ответ 7

Я дам вам одну хорошую функцию для этой проблемы:

function url_redirect(url){
    var X = setTimeout(function(){
        window.location.replace(url);
        return true;
    },300);

    if( window.location = url ){
        clearTimeout(X);
        return true;
    } else {
        if( window.location.href = url ){
            clearTimeout(X);
            return true;
        }else{
            clearTimeout(X);
            window.location.replace(url);
            return true;
        }
    }
    return false;
};

Это универсальное рабочее решение проблемы window.location. Некоторые браузеры сталкиваются с проблемой window.location.href а также иногда могут произойти сбой window.location. Вот почему мы также используем window.location.replace() для любого случая и время ожидания для "последней попытки".

Ответ 8

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

Вы не можете использовать window.location.replace или document.location.href или любой из ваших любимых методов vanilla javascript, чтобы перенаправить страницу на себя.

Так что, если вы динамически добавляете путь перенаправления из серверной части или извлекаете его из тега данных, убедитесь, что вы проверяете на каком-то этапе перенаправления на текущую страницу. Это может быть так просто, как:

if(window.location.href == linkout)
{
    location.reload();
}
else
{
    window.location.href = linkout;
}