JavaScript可以在完整的HTTP请求往返中幸存吗?

时间:2009-09-24 09:01:01

标签: javascript clientside-caching

是否有可能让JavaScript(特别是JavaScript变量及其内容)在完整的HTTP请求中存活?我想在页面更改中“缓存”/持久保存客户端信息,而不必使用隐藏的表单字段或任何与HTML相关的内容。

这可能吗?

编辑:让我根据我的意思添加一个用例。

  1. 假设我有一个JavaScript数组 我称之为 arrayOfPersons 作为页面/主页的一部分加载, 现在它包含1,000个对象 客户端。
  2. 现在用户切换页面和 将一个全新的页面/ MyAccount加载到 浏览器
  3. 我的目标:在用户请求全新页面/ MyAccount后,我在页面/主页上加载的 arrayOfPersons 仍然可用。
  4. 希望澄清我的意思。谢谢!

7 个答案:

答案 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'社区。

答案 1 :(得分:3)

是的,这是可能的。它在我整个会话期间用来维护页面状态(在客户端)是一种黑客攻击。

有一个基本页面(就像主人一样),它永远不会刷新整个会话,并且只能在其中获得iframe。并且所有应用程序页面都将加载到该框架中。

将您的状态信息作为JS对象存储到该母版页中。您可以在iframe中访问子页面中的母版页(父级)javacript对象。它将通过客户端的会话进行维护。

这是最简单的方法。它的工作非常整洁。

答案 2 :(得分:2)

找到一个有用的

JSOC: JavaScript Object Cache

  

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更加棘手,您必须明确修改要沿数据发送的链接(可以使用事件委派轻松完成)。