我的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,而不是新窗口)
谷歌搜索显示:
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>
我在这里找到了GUID函数(为此我提出了一些代码清除的建议)。