两个窗口之间的交换信息

时间:2016-07-13 09:35:47

标签: javascript jquery asp.net ajax

我不确定如何在标题中简要解释我的问题,所以请原谅我。可以说我在一些随机页面打开了我的网站,我有一个注册按钮。真的很简单,但在我的情况下,我要求注册表单出现在其他标签(或窗口)中。不是" RederPartial",也不是某种合法的新标签的弹出窗口。问题是,我希望能够在注册完成后(即创建新用户)从我的随机页面中检测到。我怎样才能传递这些信息?没有重新加载第一页

1 个答案:

答案 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打开新标签的方法并不确定。这取决于浏览器和用户的偏好。对于使用反弹出插件的用户,可能会阻止打开新选项卡。

话虽这么说,我强烈建议您修改您的设计并尝试找到一种方法,只使用一个窗口。它对你自己和你的用户来说可能更好。