2013-01-03 6 views
6

세션 타임 아웃 후 내 웹 사이트의 모든 페이지에서 로그인 페이지로 리디렉션하고 싶습니다. 나는 로그인 페이지로에서는 window.location을 설정하려고 :자바 스크립트에서 리디렉션을위한 루트 웹 사이트 가져 오기

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

하지만 "~"지원되지 않는 것 같다. 내 로그인 페이지가 내 루트 폴더 아래에 있습니다. 예를 들어

: * 에 http : // 서버/웹 사이트/ * Login.aspx

이 어떻게 자바 스크립트에서이 URL을 얻을 수 ?

감사합니다.

인발.

+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)을 server/website/page에 추가하십시오.

+0

고마워! 하지만 첫 번째 솔루션처럼 정확하게 작동합니다. 현재 페이지가 예 : server/website/Pages/Page.aspx 인 경우 실제로 http : // 아래에있는 document.location.href = http : //server/website/Pages/Login.aspx가 표시됩니다. server/website/Login.aspx – Inbal

+1

아, 그럴 경우 Javascript 만 사용할 수 없습니다. 실제 URL을 계산하려면 C#이나 PHP와 같은 서버 측 언어를 사용해야합니다. –

9

나는 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은 일부 (예 :)에서만 읽혀집니다.

0

나는 보통 나는에 대한 설정의 컬렉션을 저장하는 "settings.js"파일을 생성 신청.이 경우 : 내가

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

0
내 상황에서 작동 할 수 있도록 내가 PerKristian의 답변을 수정

를 호출 예를 들어 스크립트에서 다음

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

하고,

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