3

我正在尝试实现以下目标:
在页面 A 上,我们有一个访问受限的链接到页面 B。访问限制是在 PHP 中的服务器端处理的。
当用户点击这个到页面 B 的链接时,我们会在页面 A(通过 javascript)上显示一个带有表单的模式对话框,其中链接的 href (B) 作为操作。(为了给用户一个即时的反馈。回退是将他重定向到一个登录表单,该表单将他重定向到他想要访问的站点。)这个系统运行得很好。

但现在我的问题来了:
我们可以访问受限链接,这些链接应该在新窗口中打开。
现在,如果我在表单上使用 target="_blank" ,用户在他来自 (A) 的页面上保持注销,那仍然在后台打开。
有没有办法在表单提交到新窗口(B)后立即重新加载页面(A,在后台)?

我的第一个想法是使用 window.location.reload(); 在页面 A 的提交处理程序中。
这在 chrome 中不起作用,据我所知,这可能会产生竞争条件。

另一个想法是通过 ajax 调用登录用户并通过 javascript 打开一个新窗口。有没有办法做到这一点而不必处理弹出窗口阻止程序?


我实现了 lostsource 的想法(见下文),并稍加补充。
由于我只需要重新加载一次,因此如果 cookie 发生更改,则可以停止 setInterval 的计时器。

var ri=setInterval(function() {  
    if(oldCookie != document.cookie) {  
        // assuming a login happened, reload page  
        clearInterval(ri);  
        window.location.reload();  
    }  
},1000); // check every second

我仍然喜欢这个主意。stackoverflow 太棒了!

4

3 回答 3

2

假设您将 PHP 会话信息存储在 cookie 中,您可能能够监视 document.cookie 的更改。

在提交表单之前存储当前 cookie 的值并使用计时器监控它的变化:

form.onsubmit = function() {
     var oldCookie = document.cookie;

     var cookiePoll = setInterval(function() {
         if(oldCookie != document.cookie) {
             // stop polling
             clearInterval(cookiePoll);

             // assuming a login happened, reload page
             window.location.reload();
         }
     },1000); // check every second
}
于 2012-11-15T19:26:05.130 回答
0

在父页面上,您是否因登录而有任何视觉/功能变化?就像任何可能的新行动一样?如果没有,那么您不必做任何事情,因为您将检查父页面中每个操作的登录,您可以同时检查权限。

如果有更改或附加功能,您可以在父级中调用 javascript 函数,例如reloadMe,使用window.opener.reloadMe()

于 2012-11-15T19:20:50.640 回答
0

为什么不只是一个简单的setTimeout

setTimeout(function(){ location.reload(); }, 1000);

这有点hacky,但似乎适合您的情况。

于 2015-06-10T14:29:22.837 回答