我正在尝试实现以下目标:
在页面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太棒了!

最佳答案

假设您将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
}

10-07 19:48
查看更多