我在www.darknovagames.com上运行了一个基于浏览器的游戏.最近,我一直在努力使用CSS重新格式化网站,尝试根据HTML标准验证其所有页面.
我一直在想着让左边的AJAX导航菜单进入页面的想法(而不是每次都将用户带到一个单独的页面,需要重新加载标题和导航栏,这几乎不会改变)和我知道如果我这样做,我可能会破坏浏览器中的前进/后退按钮.我想我的问题是,我应该继续使用AJAX网站,因此要求用户使用网站导航来玩游戏,还是应该离开现在的网站,并使用标准的超链接和导航的东西?
我猜我猜的原因是我在网站上建立了一个论坛系统,很多时候我想把它说到论坛里的特定话题.
我也愿意接受建议.是否有标准(最好没有传统框架)的方式只使网站的主体区域重新加载,同时仍然更改URL,以便用户可以书签和转发/返回等?这也可能解决我的问题.我只是在这里要求最好的解决方案,而不是特定问题的答案.^ _ ^
谢谢
众所周知,在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
);
Run Code Online (Sandbox Code Playgroud)
(appCache是包含应用程序变量的预定义对象)想法是从哈希值触发应用程序中的每个操作.在体面的浏览器中,哈希值更改会在历史记录中添加一个条目,在IE(<= 7)中则不会.在所有浏览器中,向后或向前导航到具有其他哈希值的页面不会触发页面刷新.这就是间隔函数接管的地方.每次检测到哈希值更改(通过编程方式,或通过单击后退或前进)时,应用程序都可以采取适当的操作.应用程序可以跟踪它自己的历史记录,我应该能够在应用程序中显示历史记录按钮(特别是对于IE用户).
据我所知,这可以跨浏览器工作,并且在内存或处理器资源方面没有任何成本.所以我的问题是:这是否是管理XHR-apps历史的可行解决方案?优缺点都有什么?
更新:因为我使用我的自制框架,我不想使用现有的框架之一.为了能够在IE中使用location.hash并将其包含在历史中,我创建了一个简单的脚本(是的,它需要一个iframe),这可能对你有用.我在我的网站上发布它,随意使用/修改/批评它.
当用户选择多个改变页面行为的选项时,我正在寻找一个javascript历史框架来处理页面内的导航.
页面上有多个人工制品可以改变页面的数据加载,我希望将其存储为一组堆叠的行为.从更广泛的意义上讲,出于同样的原因,我想将此作为工具包添加到我未来的Web项目中.
我主要用ASP.NET编写ASP.NET,但我现在才真正担心JQuery.我用PHP,Python和Perl编写其他项目(取决于演出),因此它必须与平台无关.
我一直在网上寻找并发现了一些,但只有一个(在OReilly上覆盖)看起来它符合要求.我已经开始玩它,但我想知道其他人正在使用什么工具包以及其他人会推荐什么.
因此,如果您有任何历史框架的经验,处理Ajax中的后退按钮(等),我很乐意听到您使用过的内容以及它的用法.这真的有助于我在图书馆做出最终选择.
谢谢,
小号
我有一个页面,它使用jQuery <input>根据用户从<select>框中选择的内容动态创建大量DOM元素.
假设用户从选择框中选择4,我的脚本动态显示4个输入框.
问题是当用户刷新或返回此页面时(使用浏览器后退按钮).动态创建的元素不会重新填充到它们的最后值,而所有其他"静态"元素都是.
我想我可以创建一个隐藏的输入,通过javascript与动态框的内容序列化,然后在$ document.ready上读取它,然后重新填充我的框.
有没有更好的办法?
可能重复:
如何:后退按钮支持"Ajax"
我有一个ASP.NET MVC实现,我通过jQuery获取部分视图,例如分页和过滤.问题是我通过这样做打破了浏览器的后退按钮.如何恢复后退按钮行为(使用pound重写URL而不刷新?不确定它是如何工作的,以及如何在触发后退按钮时重新获取数据.)
谢谢您的帮助!
我有一个在AJAX上工作很重的应用程序.但是我想要有导航功能.为了欺骗网址,我正在更改location.hash,以生成网址.但是,如果我使用back/fwd,只有url更改,但页面不会重新加载.如何重写hstory.back以重新加载页面.