2016-12-05 6 views
2

Chromeでwindow.location.href = ...を使用して簡単なページリダイレクトを実行しようとしています。これら2つのwindow.location.hrefリダイレクトの違いは何ですか? (Chrome)

例えば、所望のURLは私が生成されたURLが正しいか、それは動作しませんログインけれども、ページがでリダイレクトされません

window.location.href = window.location.host + "/Error/Timeout"

を使用してみてくださいまずhttp://[hostname]:[port]/Error/Timeout

ですすべて。

は、その後、私はそれが動作

window.location.href = "/Error/Timeout"

に変更しました!しかし生成されたURLは以前の方法とまったく同じです。


私の質問は、このような違いがありますか?

+0

... 'http://somedomain.com/path/file.html '... host is 'somedomain.com' –

+0

「生成されたURLは以前のメソッドとまったく同じです」というわけではありません。 –

+0

[window.location.href = window.location.host + "/ Error/Timeout"]を実行したときにURLを確認すると、URLが追加されます –

答えて

4

window.location.host変数にはドメインのみ(プロトコルなし)が含まれているため、無効なURLにユーザーをリダイレクトしようとしているため、ブラウザで許可されません。ブラウザが「現在のドメインの一部」として、先頭に「/」を見て、ちょうどあなたが提供したURLと組み合わせるPROTOCOL://HOSTNAME:PORT/を使用するため

「/エラー/タイムアウト」は、有効なURLであります。

また、使用することができます

window.location.href = window.location.protocol + "//" + window.location.hostname + (window.location.port ? (":"+window.location.port):'') + "/Error/Timeout" 

それともより良いオプション:URLで

url = new URL(window.location.href) 
url.pathname = "/Error/Timeout" 
window.location.href = url.toString() 
+1

最初の部分でPORT部分が見つからないため、後者は唯一の正しいオプションです溶液。 –

+0

@ダニーチェンは、ポートを追加しました:) – Dekel

+0

特に、ずっと良いオプションの部分については、本当に私に新しいです...(それは基本的ですが) – shole

関連する問題