2016-12-05 74 views
2

我想在Chrome中使用window.location.href = ...做簡單的頁面重定向。這2個window.location.href重定向有什麼區別? (Chrome)

例如,希望的URL是http://[hostname]:[port]/Error/Timeout

起初,我嘗試使用

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

雖然我記錄生成的URL是正確的,這是行不通的,頁面不會在重定向所有。

然後我改

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

它的工作原理!但生成的URL與以前的方法完全相同。


所以我的問題是什麼使這種差異?

+0

...'http://somedomain.com/path/file.html '...主機是'somedomain.com' –

+0

「但生成的URL與以前的方法完全相同」,事實並非如此。 –

+0

當你做[window.location.href = window.location.host +「/ Error/Timeout」]檢查URL時,它加起來的URL –

回答

4

window.location.host變量僅包含域(沒有協議),因此您試圖將用戶重定向到無效的URL,並且瀏覽器不允許它。

的「/錯誤/超時」 有效的URL,因爲瀏覽器將着眼於「/」開頭爲「當前域的一部分」,而只是使用PROTOCOL://HOSTNAME:PORT/與您所提供的組合。

您還可以使用:

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

還是一個更好選項:

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

後者是唯一正確的選項,因爲你錯過了第一個PORT部分解。 –

+0

@DannyChen,添加了端口:) – Dekel

+0

謝謝你,尤其是對於更好的選項部分,對我來說真的很新...(雖然看起來很基本) – shole