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