web-dev-qa-db-ja.com

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を開いている場合は正常に動作します。そうでない場合は、他のページにリダイレクトされません。

なぜアイデアがありますか?

18
user2235124

送信ボタンを介してこの関数を呼び出している場合。これが、ブラウザがリダイレクトしない理由かもしれません。関数でコードを実行し、リダイレクトの代わりにページを送信します。この場合、ボタンのtypeタグを変更します。

39
Jose

この答えから、

window.location.hrefが機能していません

あなただけを追加する必要があります

return false;

関数の下部に

12
Sruit A.Suk

非常に古い質問ですが、最近同じ問題に直面し、ここから解決策を得たので答えたいと思います-

http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working 解決策:

document.location.href = 'Your url',true;

これは私のために働いた。

8
komal thakkar

一部の括弧が欠落しています。

変化する

 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
Denys Séguret

window.location.replaceは、リダイレクトをエミュレートする最良の方法です。

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

理由についての詳細window.location.replaceは、最適なjavascriptリダイレクトを見つけることができる herehere です。

3
Eldar

URLの最後に「#」を送信していないことを確認してください。私の場合、それはwindow.location.hrefの機能を妨げていました。

2
Luis Gouveia

私が他の夜に疲れていて愚かだった場合、javascriptリダイレクトを取得するためのさまざまなメソッドを支持する多くのスレッドに遭遇しましたが、すべて失敗していました...

window.location.replaceまたはdocument.location.href、またはお気に入りのVanilla javascriptメソッドを使用してページをリダイレクトすることはできませんそれ自体

そのため、バックエンドからリダイレクトパスを動的に追加する場合、またはデータタグからそれをプルする場合は、現在のページへのリダイレクトについて何らかの段階で必ず確認してください。それは次のように簡単かもしれません:

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

この問題に対する素敵な関数を1つ挙げます。

_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()を使用し、「最後の試行」のタイムアウトを使用します。