例如,说用户Bob有两个浏览器窗口打开到ListOfSomething页面。每个列表都有一个需要持久化的LoadedPageNumber属性。否则,用户在刷新时总是在第1页。 Bob可能已经加载浏览器窗口1并将其指向第5页,然后加载浏览器窗口2并将其指向第14页。如果我只是根据会话ID存储属性,Bob将刷新窗口1中的第14页。
请注意,我的状态变量实际上比这个简单的例子复杂得多,我无法坚持下去可能会导致大的问题(我的应用程序的弱点)。
我需要某种浏览器窗口id或某些东西。它当然需要是一个跨浏览器的解决方案(IE6,Wekbit?,FF2)
有任何想法吗?
关于相关性的注意事项:请记住,对于将旧的基于表单的页面与启用了较新AJAX的项目进行混合的情况,这也是有用的。有时您需要回发表单,并且您不想松开某些客户端状态值。
这样做的方式与在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>