是否有可能让JavaScript(特别是JavaScript变量及其内容)在完整的HTTP请求中存活?我想在页面更改中“缓存”/持久保存客户端信息,而不必使用隐藏的表单字段或任何与HTML相关的内容。
这可能吗?
编辑:让我根据我的意思添加一个用例。
希望澄清我的意思。谢谢!
答案 0 :(得分:5)
为了补充Nick的答案,不同的浏览器支持以某种形式持久存储的想法。去年,为所有浏览器规范化这些工作已经做了很多努力。
Here's one library包含HTML 5的DOM存储,Microsoft的UserData
,会话Cookie和window.name
(使用JSON序列化为window.name can
only store strings)。
Here's another仅关注window.name
(实际上适用于Opera 9 +,IE6 +,Firefox 1.5 +,Safari [3我认为]。
这是jQuery plugin,它使用.swf
(闪存)文件提供最多的跨浏览器支持(尽管如果您配置它,它确实支持本机解决方案)。我不能担保,但应该提到这个jQuery-lovin'社区。 p>
答案 1 :(得分:3)
是的,这是可能的。它在我整个会话期间用来维护页面状态(在客户端)是一种黑客攻击。
有一个基本页面(就像主人一样),它永远不会刷新整个会话,并且只能在其中获得iframe。并且所有应用程序页面都将加载到该框架中。
将您的状态信息作为JS对象存储到该母版页中。您可以在iframe中访问子页面中的母版页(父级)javacript对象。它将通过客户端的会话进行维护。
这是最简单的方法。它的工作非常整洁。
答案 2 :(得分:2)
找到一个有用的
JSOC框架是一个可插拔的, 可扩展的开源客户端 JavaScript的缓存框架。
JSOC为Web开发人员提供了一个 直截了当的表现方式 缓存技术(添加,替换, 在任何内部删除,冲洗等 支持JavaScript的浏览器。
由于JSOC是一个独立的JavaScript 模块,将JSOC整合到Web中 开发项目是一个问题 包括脚本引用,和 使用常见的缓存方法。 低级方法包含在 这样的JSOC JavaScript模块 开发人员可以专注于Web 手头的发展任务。
答案 3 :(得分:2)
较新的浏览器支持DOM storage,可以存储可在页面之间保留的任意数据。您还可以使用隐藏的Flash应用来记住事物。像Dojo Storage这样的库可以为您处理检测,因此您只需保存数据,它就会使用任何可用的数据。
它不会自动保存下一页的所有Javascript变量 - 您需要添加一个onunload处理程序来存储用户离开页面时的内容。
答案 4 :(得分:0)
一个框架集会为你提供一个地方来保存你的javascript,但整页加载...我认为不是。
Cookie对于“持久化”数据也可能有用,但这不是您提出的要求。
答案 5 :(得分:0)
如果我理解正确的话,你只需要将你自己的缓存函数添加到所有表单的onSubmit和onClick所有链接上,如:
var cachedpages;
$("A").onclick(function(){
url = $(this).attr('href'); // maybe hash?
if (cachedpages[url]) {
// replacing all html
} else {
$.get(url, function(data){
cachedpages[url] = data;
// replacing all html
});
}
return false;
});
答案 6 :(得分:0)
一种可能性是使用框架集并将对象保留在那里,另一种可能是序列化它们并通过
之一保留数据window.name
document.cookie
location.search
document.cookie
是在同一域中的页面调用之间存储数据的规范方法,并提供控制访问和生命周期的机制。
如果您使用window.name
,则数据会在浏览器实例的生命周期内持续存在。
使用window.location
更加棘手,您必须明确修改要沿数据发送的链接(可以使用事件委派轻松完成)。