我不确定如何在标题中简要解释我的问题,所以请原谅我。可以说我在一些随机页面打开了我的网站,我有一个注册按钮。真的很简单,但在我的情况下,我要求注册表单出现在其他标签(或窗口)中。不是" RederPartial",也不是某种合法的新标签的弹出窗口。问题是,我希望能够在注册完成后(即创建新用户)从我的随机页面中检测到。我怎样才能传递这些信息?没有重新加载第一页
答案 0 :(得分:1)
有两种方法可以让两个窗口相互通信(通过服务器,使用Cookie,使用FileSystem API或本地存储。
到目前为止,{p> Locale Storage是来自同一个域的两个窗口之间进行通话的最简单方法,但旧版浏览器不支持它。既然你需要联系服务器以了解有人注册的时间,我建议使用服务器(Ajax //网络套接字)。这是一个简单的AJAX解决方案,您可以在随机页面中使用它:
(function(){
var formOpened = false;
var registered = false;
//Change to whatever interaction is needed to open the form
$('#registerbutton').on('click', function(){
if (!formOpened){
formOpened = true;
//Will try to poll the server every 3 seconds
(function pollServer(){
$.ajax({
url: "/ajax/pollregistered",
type: "GET",
success: function(data) {
if (data.registered){
registered = true;
//do other stuff here that is needed after registration
}
},
dataType: "json",
complete: setTimeout(function() {if (!registered) pollServer();}, 3000),
//will timeout if request takes longer than 2 seconds
timeout: 2000,
})
})();
//opens the new tab
var win = window.open('/registrationform', '_blank');
win.focus();
}
});
})();
然后,您可以在' / ajax / pollregistered'中使用访问者的会话密钥。编写后端代码的操作,以检查此访问者是否以及何时注册为您网站的用户。
如果您不介意使用本地存储,则可以轮询存储而不是服务器,并在注册时将注册页面写入本地存储。这对您的服务器来说压力较小,但对于使用古老浏览器的用户可能无效。
这种打开新标签的方法并不完全可靠,也不值得。从技术上讲,用javascript打开新标签的方法并不确定。这取决于浏览器和用户的偏好。对于使用反弹出插件的用户,可能会阻止打开新选项卡。
话虽这么说,我强烈建议您修改您的设计并尝试找到一种方法,只使用一个窗口。它对你自己和你的用户来说可能更好。