微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – 在javascript中,我如何唯一标识一个浏览器窗口从另一个在同一个cookiedbased sessionId下

我的Web应用程序的用户可能打开多个浏览器窗口并指向同一页面。我希望页面中某些东西的状态(通过ajax加载)被保留在回发之间。我可以存储在cookie或我的服务器上。无论如何,我不能想像如何区分每个窗口。

例如,说用户Bob有两个浏览器窗口打开到listofSomething页面。每个列表都有一个需要持久化的LoadedPageNumber属性。否则,用户在刷新时总是在第1页。 Bob可能已经加载浏览器窗口1并将其指向第5页,然后加载浏览器窗口2并将其指向第14页。如果我只是根据会话ID存储属性,Bob将刷新窗口1中的第14页。

请注意,我的状态变量实际上比这个简单的例子复杂得多,我无法坚持下去可能会导致大的问题(我的应用程序的弱点)。

我需要某种浏览器窗口id或某些东西。它当然需要是一个跨浏览器的解决方案(IE6,Wekbit?,FF2)

有任何想法吗?

关于相关性的注意事项:请记住,对于将旧的基于表单的页面与启用了较新AJAX的项目进行混合的情况,这也是有用的。有时您需要回发表单,并且您不想松开某些客户端状态值。

您可以设置自己的窗口名称,确切的语法现在转义我,但您可以使用当前时间和会话ID在窗口加载上创建唯一的ID,然后使用该id

这样做的方式与在javascript window.open()函数中设置一个名称一样,(但是你可以自己而不是新的窗口)

谷歌搜索显示

self.window.name = myclass.getUniqueWindowId(thisSession);

更新

关于你需要将其从刷新中保存到刷新,我做了一些测试,它看起来保存它从刷新刷新。使用Firefox 3,在初始加载时,窗口名称为空,并且一直按下CTRL R,并填充了窗口名称。然后我注释了设置名称代码并重新加载,它仍然保留了名称

<script type="text/javascript">

    alert( self.window.name );

    self.window.name = "blah";

</script>

更新

我必须注意到jQuery的“jquery-session”插件的注释,这个插件真的很有用,提供了比这里讨论的更多的方法

虽然,还应该明确指出,它依赖于HTML5的Web存储,旧的IE版本不支持

公司仍然在很大程度上依赖于IE 7(巴西在此以下)。

基于self.window.name,对于不符合HTML5的一切解决方案,我提供以下代码片段作为跨浏览器解决方案:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script language="javascript" type="text/jscript">
    //----------------------------------------------------------------------
    //-- guarantees that window.name is a GUID,and that it would
    //-- be preserved whilst this window's life cicle
    //----------------------------------------------------------------------
    //-- window.name will be set to "GUID-<SOME_RANDOM_GUID>"
    //----------------------------------------------------------------------

    $(window).load(
        function () {
            //----------------------
            var GUID = function () {
                //------------------
                var S4 = function () {
                    return(
                            Math.floor(
                                    Math.random() * 0x10000 /* 65536 */
                                ).toString(16)
                        );
                };
                //------------------

                return (
                        S4() + S4() + "-" +
                        S4() + "-" +
                        S4() + "-" +
                        S4() + "-" +
                        S4() + S4() + S4()
                    );
            };
            //----------------------

            if (!window.name.match(/^GUID-/)) {
                window.name = "GUID-" + GUID();
            }
        }
    ) //--------------------------------------------------------------------
</script>

我发现GU​​ID功能here(为此我提出了一些代码清理)。

原文地址:https://www.jb51.cc/ajax/160418.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐