srm*_*ark 28 ajax persistence state
我的Web应用程序的用户可能打开了多个浏览器窗口并指向同一页面.我希望页面中某些内容的状态(通过ajax加载)在回发中保留.我可以存储在cookie中或存储在我的服务器上.无论哪种方式,我都想不出如何区分每个窗口.
例如,假设用户Bob有两个浏览器窗口打开ListOfSomething页面.每个列表都有一个LoadedPageNumber属性,我需要保留它.否则用户在刷新时总是在第1页结束.Bob可能已加载浏览器窗口1并将其指向第5页,然后加载浏览器窗口2并将其指向第14页.如果我只是根据会话ID存储该属性,则Bob将在窗口1中获取第14页(如果他刷新).
请注意,我的状态变量实际上比这个简单的例子复杂得多,而且我无法坚持它们可能会导致很大的问题(我的应用程序存在缺陷).
我需要某种浏览器窗口ID或其他东西.它当然需要是一个跨浏览器的解决方案(IE6 +,Wekbit?+,FF2 +)
有任何想法吗?
关于相关性的注意事项:请记住,这对于将较旧的基于表单的页面与较新的启用AJAX的项目混合的情况也很有用.有时您需要回发表单,并且您不希望丢失一些客户端状态值.
Roy*_*ico 37
您可以设置自己的窗口名称,确切的语法现在让我逃避,但您可以使用当前时间和会话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>
Run Code Online (Sandbox Code Playgroud)
我必须注意下面关于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>
Run Code Online (Sandbox Code Playgroud)
我在这里找到了GUID函数(为此我提出了一些代码清理).
| 归档时间: |
|
| 查看次数: |
37944 次 |
| 最近记录: |