7

セッションがタイムアウトした後、Webサイトのすべてのページからログインページにリダイレクトしたい。window.locationをログインページに設定しようとしています:

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

しかし、「〜」はサポートされていないようです。ログインページはルートフォルダの下にあります。

例:* http:// server / website / * Login.aspx

このURLをJavaScriptで取得するにはどうすればよいですか?

どうもありがとう、

インバル。

4

8 に答える 8

11

window.location.origin を使用します。最初の部分が返され、その後は親 URL を Uri エンコードするだけで完了です!

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

window.location.href = loginUrl;

クロス ブラウザー機能のちょっとしたヒントは、window.location を使用することです。すべての準拠ブラウザで読み取り/書き込みが可能です。document.location は読み取り専用です (つまり)。

于 2013-09-18T08:53:11.827 に答える
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;
于 2013-01-03T08:51:29.470 に答える
2
function getURL() { 
    var arr = window.location.href.split("/"); 
    delete arr[arr.length - 1]; 
    return arr.join("/"); 
}

次のように使用できます。

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

私の関数と最初の答えの違いは、「/」がサーバー/ページにリダイレクトされ、私のコードが(URLの例で)サーバー/ウェブサイト/ページにリダイレクトされることです。

于 2013-01-03T08:55:17.327 に答える
1

「/website」の部分は通常、サーバー側の情報です。JavaScript だけでこれを判断することはできません。

したがって、これをサーバーからクライアントに渡す必要があります。その場合は、「http://server/website」を一度に渡すこともできます。

于 2013-01-03T08:55:10.973 に答える
0

この関数は、現在の 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 またはルート URL を取得

于 2015-01-05T16:43:44.027 に答える