修补AJAX应用中Back/Forward Button和Bookmark失效的问题

想法与目标

从AJAX诞生至今,就存在着Back/Forward Button和bookmark失效的问题,我 以前一般提倡,一个好的AJAX应用应该不让用户有点击“Back/Forward”的想法 ,并且使用某种方式提供给用户一个能够记录直接产生页面的Bookmark。 Windows Live Local应该是这种应用最好的典范之一,其灵活的交互,良好的界 面让我在初遇时不得不眼前一亮。

另外,我也曾经见过把后退按钮禁用的做法(其实这样对于解决问题的确不 错),不过这些都似乎只是一个workaround,设法避开这个AJAX应用普遍存在的 问题。似乎Gmail能够支持Back按钮,但是我惊奇的发现,在点击Back后,却不 能使用Forward,所以这还不算成功的解决这个问题。那么能否解决?似乎已经 有了一定的实现。

事实上,之所以我会产生实现自己的解决方案的想法,是因为从Nikhil Kothari的Blog上看到了他的解决方案(点击这里查看)。他实现了一个 HistoryControl控件,可以在页面中配合UpdatePanel使用,在一定程度上实现 了对Back/Forword Button已经Bookmark的支持。但是正如他在Blog上所说的, 这只是他的一个prototype。我在使用了他的演示之后,也的确发现了一些问题 (演示也能从Nikhil的Blog上下载):

HistoryControl是一个Server控件,必须配合UpdatePanel使用,并没有对于 Atlas的客户端应用甚至普通的AJAX应用提供基本的支持。

不支持FireFox(不知为何,我在自己尝试之后觉得支持FireFox比IE容易实 现)。

在IE里使用时,从Back和Forward的下拉框里可以看出,那些Title都成为了 “Empty Page”。

不支持在Back和Forward下拉框中选择一项History跳转。

如果访问了别的站点再Back,则在IE下不支持多次回退。

部署麻烦。事实上我觉得很奇怪,我除了直接在他的项目中成功运行之外。 部署到别的项目或者是我的空间都有问题,怎么也找不出原因,估计是文件路径 问题,需要仔细读一下他的代码。

总之,这个解决方案还很不成熟,但是我们要对Nikhil,Atlas和微软有信心 ,对于Back/Forward的内置支持应该会出现在Atlas的后续版本中。

于是我想,不如我来实现一个自己的吧,虽然我一直提倡软件复用,但是如 果找不到成熟的解决方案,那么就该发挥程序员的主观能动性了。对于我最后的 实现,它有以下特点:

一个轻量级的JS解决方案。虽然我是在Atlas的基础上写的,但是只是使用了 Atlas中的Sys.Timer类,很容易修改成独立于任何库的JS代码。 

支持IE和FireFox。

简单的支持Back和Forward的下拉框里的Title文字,在大多数情况下不会出 错。产生Nikhil的这个问题的原因在阐述我的实现时会提及。我简单地解决了这 个问题,但是没有设计出完整支持title问题的完美实现。我有一些想法,似乎 十分复杂,在尝试时都宣告失败。

支持在Back和Forword下拉框中选择一项History跳转。

支持Bookmark,用户可以轻松将页面加入收藏夹。 

易于使用,部署简单。

对于我列出Nikhil的实现里的第5个问题,我想了一些办法,却依旧没有解决 。现在虽然脑子里有想法,但还需要继续尝试。

时间: 2024-08-17 13:11:19

修补AJAX应用中Back/Forward Button和Bookmark失效的问题的相关文章

Ajax.net中与服务器控件的交互使用

ajax|服务器|交互|控件 前两天在网上下了个ajax组件体验了一下,感觉很不错.但后来开始想怎样能让它跟server控件交互呢,例如我上输出一个列表,就只有用js一条一条html的输出吗?不!!现在我说说怎样与 datagrid交互. 注:ajax.net的组件可以到此网下载,我用的是for .net 1.1版本的.http://ajax.schwarz-interactive.de/ 1. 在引用中添加引用Ajax.dll.(这个很废话) 2.在web.config中建立HttpHandl

Ajax应用中常见问题

1.ajax,action中response返回的xml文档格式错误时,eclipse debug进入不到action中. 2.ajax缓存问题,需要加入xmlHttp.setRequestHeader("If-Modified-Since","0″);便可解决. 3.如果不是ajax提交,而设置了PrintWriter out = response.getWriter();则jsp会产生中文乱码. 4.ajax返回xml乱码的原因 response.setContentTy

网络中的Ajax:在Ajax架构中聚合来自多个站点的内容所面临的安全性和拓扑问题

在试图将 Asynchronous JavaScript and XML (Ajax) 编程技术引入到网络环境中时,常常会遇到一些困难. 简介 Ajax 架构一个让人兴奋的特性就是能够聚合来自多个数据源的内容并由此创建一个全新的站点或 Web 应用程序.比方说,您可以创建这样一个 Web 应用程序,它能综合各种气象服务的信息来给出几个滑雪场的天气信息.这些天气信息原来可以通过几个 Web 站点得到,而您的应用程序将这些数据一同带到了一个 Web 页上.这类应用程序通常都被称为 mashup.无需

如何从jQuery的ajax请求中删除X-Requested-With

 X-Requested-With常用于判断是不是ajax请求,ajax请求中删除X-Requested-With的方法如下,感兴趣的朋友可以参考下 X-Requested-With常用于判断是不是ajax请求    但是有时我们会有需要删除X-Requested-With的情况    下面介绍一种方式 js代码   代码如下: $.ajax({  url: 'http://www.zhangruifeng.com',  beforeSend: function( xhr ) {  xhr.se

android-在 viewpager 中如何创建 button onClick 方法

问题描述 在 viewpager 中如何创建 button onClick 方法 我想使用viewpager在按钮点击时Toast一个消息,也想了解更多关于如何访问viewpager中的视图的信息.用的以下的信息,没什么反应. public class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return 3; } @Override public Object instantiateItem

界面-在安卓中,通过button在另一个XML页面实现登录事件后返回如何让这个button消失

问题描述 在安卓中,通过button在另一个XML页面实现登录事件后返回如何让这个button消失 在安卓中,在主界面通过button按钮在另一个页面实现登录事件成功以后,返回初始主界面,让遗留的这个button按钮消失, 解决方案 给按钮隐藏不就行了啊 解决方案二: 给一个变量,可以判断 解决方案三: 1.MainActivity里这个button的点击事件跳转时使用 startActivityForResult(intent, 0);方法 2.MainActivity里重写下面的方法 pro

artdialog-asp:UpdatePanel包围中的asp:Button点击事件无效

问题描述 asp:UpdatePanel包围中的asp:Button点击事件无效 artdialog弹出框中 用一个asp:UpdatePanel包围的asp:Button点击事件无效,请各位指点,不好意思,新手还没有C币

在局域网AD内,有些网站可以访问,有些网站无法访问,IE左下角提示AJAX调用中...

问题描述 ajax调用中....,显示很长时间,整个系统变得十分缓慢,过了很长时间(十几.二十几分钟后),还能访问.我的电脑在局域网内,AD域环境下,XP系统,IE8浏览器有些电脑可以正常访问这些网站.网站应该没有问题.是IE的问题呢,还是网络问题?dns解析问题?请高手解答 解决方案 解决方案二:能否断点看下,是否是ajax到了后台出现什么状况了呢?解决方案三:可能是网段的问题解决方案四:怎么断点?不明白解决方案五:网段应该没有问题,其他计算机也在同网段下解决方案六:显示很慢的电脑上ping下

代码-Android L QuickSetting中增加一个button

问题描述 Android L QuickSetting中增加一个button 按照MTK的提供的文档,我添加了一个按钮,代码是编译过了,但是重启没有没有效果,也没有错误日志,但是恢复出厂设置之后,就报了一个安全的异常, 解决方案 补上日志 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.systemui.SystemUIApplication" on path: DexPathLis