Получить URL-адрес корневого веб-сайта в javascript для перенаправления

Я хочу перенаправить на страницу входа с каждой страницы моего веб-сайта после истечения времени ожидания сеанса. Я пытаюсь установить window.location на страницу входа:

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

но "~", похоже, не поддерживается. моя страница входа находится в моей корневой папке.

например: *http://server/website/*Login.aspx

Как я могу получить этот URL-адрес в javascript?

Большое спасибо,

Инбал.


person Inbal    schedule 03.01.2013    source источник
comment
Каково содержание вашего window.parent.location.href?   -  person Cerbrus    schedule 03.01.2013


Ответы (7)


Я бы использовал window.location.origin. Он вернет вам первую часть, а после этого Uri просто закодирует родительский URL-адрес, и все готово!

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

window.location.href = loginUrl;

Небольшой совет для межбраузерной функциональности — использовать window.location. Он доступен для чтения/записи во всех совместимых браузерах. Пока document.location читается только в некоторых (т.е.).

person Johan Hörnqvist    schedule 18.09.2013
comment
Из любопытства, это (window.location.origin) то, что используется внутри, когда у вас есть якорная ссылка с href, начинающимся с /? например <a href="/foo"> - person rococo; 12.09.2019

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

Вы можете использовать его следующим образом:

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

Разница между моей функцией и первым ответом заключается в том, что «/» будет перенаправлять на сервер/страницу, а мой код будет перенаправлять (в вашем примере URL) на сервер/веб-сайт/страницу.

person Dillen Meijboom    schedule 03.01.2013
comment
Спасибо! но он работает точно так же, как первое решение. Если моя текущая страница, например: server/website/Pages/Page.aspx, я получаю document.location.href = сервер/веб-сайт/Pages/Login.aspx, который на самом деле находится по адресу: сервер/веб-сайт/ Логин.aspx - person Inbal; 03.01.2013
comment
Ах, в таком случае вы не можете использовать только Javascript. Вам нужно использовать серверный язык, такой как C# или PHP, для вычисления реального URL-адреса. - person Dillen Meijboom; 03.01.2013

Зачем использовать ~? На первый взгляд, я бы сказал, что его удаление решает вашу проблему. Как это.

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

[EDIT] отвечая на первый комментарий...

Я считаю, что это может помочь:

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

document.location.href = getLoginPage() + "?ReturnUrl=" + ParentUrl;
person Walter Brand    schedule 03.01.2013
comment
Я пытался... но если моя текущая страница, например: server/website/Pages/Page.aspx, поэтому я получаю document.location.href = server/website/Pages/Login.aspx, который на самом деле находится по адресу: server/website/Login.aspx - person Inbal; 03.01.2013

Часть «/ веб-сайт» обычно представляет собой информацию на стороне сервера. JavaScript никак не может определить это сам по себе.

Таким образом, вам придется передать это с сервера клиенту. Тогда вы можете сразу передать "http://server/website".

person Jacco    schedule 03.01.2013

Эта функция вернет корневой (базовый) URL-адрес текущего URL-адреса.

У вас есть что-то вроде: http://www.example.com/something/index.html Вы хотите: http://www.example.com/something/

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

Подробности здесь: Javascript: получение базового или корневого URL

person Per Kristian    schedule 05.01.2015

Обычно я создаю файл «settings.js», в котором храню набор настроек для приложения. В таком случае:

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

а потом в скрипте например вызываю

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

person erionpc    schedule 07.09.2016

Я изменил ответ ПерКристиана, чтобы он работал в моей ситуации,

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

person Adam Sparks    schedule 03.04.2017