【发布时间】:2010-10-08 19:07:55
【问题描述】:
众所周知,在 XHR(又名 AJAX)Web 应用程序中,不会为您的应用程序构建历史记录,并且单击刷新按钮通常会使用户退出他/她当前的活动。我偶然发现了 location.hash(例如http://anywhere/index.html#somehashvalue)来规避刷新问题(使用 location.hash 来通知您的应用程序它的当前状态并使用页面加载处理程序来重置该状态)。真的很好很简单。
这让我想到了使用 location.hash 来跟踪我的应用程序的历史记录。我不想使用现有的库,因为它们使用 iframe 等。所以这是我的五分钱:当应用程序页面加载时,我开始这样做:
setInterval(
function(){
if (location.hash !== appCache.currentHash) {
appCache.currentHash = location.hash;
appCache.history.push(location.hash);
/* ... [load state using the hash value] ... */
return true;
}
return false;
}, 250
);
(appCache 是一个包含应用程序变量的预定义对象) 这个想法是从哈希值触发应用程序中的每个动作。在体面的浏览器中,哈希值更改会在历史记录中添加一个条目,而在 IE (
据我所知,这可以跨浏览器工作,并且在内存或处理器资源方面没有成本。所以我的问题是:这是否是管理 XHR 应用程序历史的可行解决方案?有什么好处和坏处?
更新:因为我使用自制框架,我不想使用现有框架之一。为了能够在 IE 中使用 location.hash 并将其也包含在它的历史中,我创建了一个简单的脚本(是的,它需要一个 iframe),它可能对您有用。我发布了它on my site,请随意使用/修改/批评它。
【问题讨论】:
标签: javascript ajax browser-history xmlhttprequest