重定向/重新加载浏览器

时间:2014-02-27 19:56:25

标签: javascript

我想显示一旦用户进行身份验证后关闭的弹出窗口,并将用户重定向到主页。为了向后兼容,登录页面可以在浏览器中显示,而不是在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),但它在弹出窗口中引起了无限循环。

我怎样才能让它发挥作用?感谢

1 个答案:

答案 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>