我想显示一旦用户进行身份验证后关闭的弹出窗口,并将用户重定向到主页。为了向后兼容,登录页面可以在浏览器中显示,而不是在popu窗口中显示。
的index.jsp
<%--@elvariable id="USER" type="cz.literak.demo.oauth.model.entity.User"--%>
<c:if test="${not empty USER}">
<p>
Logged as ${USER.firstName} ${USER.lastName}, <a href="logout">Logout</a>
<c:if test="${not USER.areRegistered('TW,FB,GG')}">
<a href="login.jsp" class="popup" data-width="600" data-height="400">Improve Login</a>
</c:if>
</p>
</c:if>
<c:if test="${empty USER}">
<p>
<a href="login.jsp" class="popup" data-width="600" data-height="400">Login</a>
</p>
</c:if>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script>
<script>
$("a.popup").click(function(event){
event.preventDefault();
window.open (href, "OAUTHLOGIN", "height=" + height +",width=" + width + "");
});
</script>
一旦通过身份验证,弹出/浏览器将重定向到logged.jsp。如果在其中打开了login.jsp,它应该将主窗口重定向到主页并关闭弹出窗口。
<script>
window.top.location = "index.jsp";
if (window.name == "OAUTHLOGIN") {
window.close();
}
</script>
似乎有一个例外。如果浏览器已经显示index.jsp,则没有任何反应。我尝试了location.reload(true)
,但它在弹出窗口中引起了无限循环。
我怎样才能让它发挥作用?感谢
答案 0 :(得分:1)
你可以使用;
<script>
// Get parent url
var parent_url = window.parent.location.href;
// Check parent if it has "index.php"
if (parent_url.match(/index.jsp/g) || parent_url.match(/.com\//g)) { // yoursite.com/
// if it is, reload parent window
window.opener.location.reload(false);
} else {
// Else go to index.php
window.top.location = "index.jsp";
}
if (window.name == "OAUTHLOGIN") {
window.close();
}
</script>
修改强>
另一种可能的方案
用户登录后,只需刷新父窗口即可。在您的系统中,您需要检查用户是否在某个拦截器中登录。当父窗口刷新时,如果用户登录,它将被重定向到注册区域,否则如果当前页面是注册页面,它将被重定向到登录页面。在loggedin.jsp
中,您只能使用;
<script>
window.opener.location.reload(false);
if (window.name == "OAUTHLOGIN") {
window.close();
}
</script>