2013-01-03 31 views
6

我想在會話超時後從網站的每個頁面重定向到登錄頁面。 我嘗試了window.location設置爲登錄頁面:在JavaScript中獲取根網站的URL以進行重定向

var ParentUrl = encodeURIComponent(window.parent.location.href); 
document.location.href = "~/Login.appx?ReturnUrl=" + ParentUrl; 

但「〜」似乎不被支持。 我的登錄頁面位於我的根文件夾下。

例如: * 的http://服務器/網站/ *的Login.aspx

我怎樣才能得到這個URL在JavaScript?

非常感謝,

英巴爾。

+1

什麼是你'window.parent.location.href'的內容? – Cerbrus

回答

2

爲什麼要用〜?乍一看,我會說刪除它可以解決你的問題。喜歡這個。

document.location.href = "/Login.appx?ReturnUrl=" + ParentUrl; 

[編輯]響應第一條評論...

我相信這可能做的伎倆:

function getLoginPage() { 
    var urlParts = document.location.href.split("/"); 
    return "/" + urlParts[2] + "/" + urlParts[3] + "/Login.aspx"; 
} 

document.location.href = getLoginPage() + "?ReturnUrl=" + ParentUrl; 
+0

我試過......但如果我當前的頁面是例如:http://server/website/Pages/Page.aspx,所以我得到document.location.href = http:// server/website/Pages/Login。 aspx其實位於:http://server/website/Login.aspx – Inbal

1

的 「/網站」 部分通常是服務器端的信息。 JavaScript本身無法確定這一點。

所以你將不得不從服務器傳遞給客戶端。那麼你可以一次通過「http:// server/website」。

1
function getURL() { 
    var arr = window.location.href.split("/"); 
    delete arr[arr.length - 1]; 
    return arr.join("/"); 
} 

您可以使用它像這樣:

document.location.href = getURL() + "Login.appx?ReturnUrl="; 

我的功能,第一個答案之間的區別在於,一個「/」重定向到服務器/頁,我的代碼會重定向(在你的例如URL)到服務器/網站/頁面。

+0

謝謝!但它的確像第一種解決方案一樣工作。如果我當前的頁面是例如:server/website/Pages/Page.aspx,所以我得到document.location.href = http://server/website/Pages/Login.aspx,它實際上位於:http://服務器/網站/ Login.aspx – Inbal

+1

啊,在這種情況下,你只能使用Javascript。 您需要使用像C#或PHP這樣的服務器端語言來計算真實URL。 –

9

我會使用window.location.origin。它會返回你的第一部分,然後只是Uri編碼父網址,它完成了!

var parentUrl = encodeURIComponent(window.location.href), 
    loginUrl = window.location.origin+"/Login.appx?ReturnUrl=" + parentUrl; 

window.location.href = loginUrl; 

跨瀏覽器功能的一個小技巧是使用window.location。它在所有兼容的瀏覽器上都是可讀寫的。雖然document.location只在某些(ie)中被讀取。

0

我通常創建一個「settings.js」文件,在其中我存儲的設置的集合爲應用。在這種情況下:

settings = { "root": "myAppRoot/" /*, ... */ };

,然後在劇本,比如我叫

myDynamicDiv.load("/" + settings.root + "urlPart1/urlPart2/app"

0

我修改PerKristian的回答所以它會在我的情況下工作,

function getBaseUrl() { 
    var re = new RegExp(/^.*\/\/[^\/]+/); 
    return re.exec(window.location.href); 
} 

匹配一切直到第一個孤獨/

例如

http://stackoverflow.com/questions/14135479/get-root-website-url-in-javascript-for-redirect

將返回http://stackoverflow.com