我正在努力实现以下目标:
在页面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太棒了!
答案 0 :(得分: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
}
答案 1 :(得分:0)
在父页面上,您是否因登录而进行了视觉/功能更改?在可能的任何新行动中? 如果没有,那么你不必做任何事情,因为你要检查从父页面的每个动作登录,你可以检查权限以及。
如果有更改或其他功能,您可以使用reloadMe
window.opener.reloadMe()
答案 2 :(得分:0)
为什么不只是一个简单的setTimeout
setTimeout(function(){ location.reload(); }, 1000);
有点hacky,但似乎适合你的情况。