IT技术博客大学习 共学习 共进步

控制浏览器是否缓存网页状态

Cat in dotNET 2009-11-10 12:36:46 浏览 3,022 次

Question

    在Firefox等浏览器中,如果你打开一个页面并进行若干操作,例如在文本框进行输入,甚至点击按钮进行Ajax操作更新页面局部,这些操作的结果都会被缓存下来。在你点击链接离开这个页面后,如果你通过后退按钮回到这个页面,你会发现它仍出于你离开时的状态,而非页面刚刚加载好后的初始状态。在一些情况下,这样的缓存方式是符合我们预期的;但在另外一些情况下,我们更希望页面恢复到初始状态,或者说让页面从零开始重新加载一边。我们如何才能让浏览器尊重我们的选择呢?

Answer

    如果你只是希望页面不缓存加载后的变更,后退就恢复到最初加载的状态,你只需要一个空白的unload事件就可以了:

window.onunload = function(){};

    其中的原理是,Firefox等浏览器会尝试通过“挂起(suspend)”的方式来缓存页面,使得后退能够恢复到页面之前被挂起那一刻的状态。然而如果unload事件有处理函数,浏览器就认为你可能已经对页面进行了析构处理,这时候页面已经不可能回到正常的交互状态,也就不能以挂起的方式来缓存页面。

    如果我们希望允许浏览器挂起页面,同时又需要知道何时被挂起何时被恢复,那该怎么办呢?我们可以用window对象上的pageshow和pagehide事件。当页面被挂起并隐藏时,pagehide事件会被触发;当页面被恢复到挂起前状态并显示出来时,pageshow事件会被触发。Firefox从1.5开始就支持这两个事件,Safari最新的nightly build也支持这两个事件。

建议继续学习

  1. 浏览器的工作原理:新式网络浏览器幕后揭秘 (阅读 22,827)
  2. 浅析http协议、cookies和session机制、浏览器缓存 (阅读 17,203)
  3. 分布式缓存系统 Memcached 入门 (阅读 16,043)
  4. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (阅读 15,706)
  5. 强制刷新本地 DNS 缓存记录 (阅读 10,640)
  6. 浏览器的渲染原理简介 (阅读 8,165)
  7. 程序员眼里IE浏览器是什么样的 (阅读 7,863)
  8. 各种浏览器审查、监听http头工具介绍 (阅读 7,725)
  9. php缓存与加速分析与汇总 (阅读 7,723)
  10. 图说浏览器战争:火狐、微软、谷歌那些事 (阅读 7,344)