これはよく議論される質問であることは知っていますが、なぜそれがうまくいかないのかわかりません。
これは私の機能です:
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を開いている場合は正常に動作します。そうでない場合は、他のページにリダイレクトされません。
なぜアイデアがありますか?
送信ボタンを介してこの関数を呼び出している場合。これが、ブラウザがリダイレクトしない理由かもしれません。関数でコードを実行し、リダイレクトの代わりにページを送信します。この場合、ボタンのtypeタグを変更します。
非常に古い質問ですが、最近同じ問題に直面し、ここから解決策を得たので答えたいと思います-
http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working 解決策:
document.location.href = 'Your url',true;
これは私のために働いた。
一部の括弧が欠落しています。
変化する
window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
に
window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/";
||
と比較して+
には優先順位が与えられていません。
window.location
割り当て後もすべて削除します。このコードは、ページが変更されたときに実行されることは想定されていません。
注:location.href
を設定する必要はありません。 location
を設定するだけで十分です。
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 です。
URLの最後に「#」を送信していないことを確認してください。私の場合、それはwindow.location.hrefの機能を妨げていました。
私が他の夜に疲れていて愚かだった場合、javascriptリダイレクトを取得するためのさまざまなメソッドを支持する多くのスレッドに遭遇しましたが、すべて失敗していました...
window.location.replace
またはdocument.location.href
、またはお気に入りのVanilla javascriptメソッドを使用してページをリダイレクトすることはできませんそれ自体。
そのため、バックエンドからリダイレクトパスを動的に追加する場合、またはデータタグからそれをプルする場合は、現在のページへのリダイレクトについて何らかの段階で必ず確認してください。それは次のように簡単かもしれません:
if(window.location.href == linkout)
{
location.reload();
}
else
{
window.location.href = linkout;
}
この問題に対する素敵な関数を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()
を使用し、「最後の試行」のタイムアウトを使用します。