论坛首页 Web前端技术论坛

如果使用AJAX,如何解决这些问题

浏览 14150 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-10-27  
jetever 写道
Gmail在IE中是可以后退的,在firefox和opea的后退都不好用,有人了解Gmail中用到的ajax的架构吗?


胡说,FireFox里面back好用的很。
0 请登录后投票
   发表时间:2005-10-28  
有人能将以下gmail的ajax的架构吗?没有搞明白它是怎么实现的。
0 请登录后投票
   发表时间:2005-10-28  
http://www.onjava.com/pub/a/onjava/2005/10/26/ajax-handling-bookmarks-and-back-button.html?CMP=OTC-FP2116136014
0 请登录后投票
   发表时间:2005-10-28  
谢谢楼上的,看了你链接到的那篇文章,明白了很多,再次表示感谢。
0 请登录后投票
   发表时间:2005-10-29  
blueoxygen 写道
http://www.onjava.com/pub/a/onjava/2005/10/26/ajax-handling-bookmarks-and-back-button.html?CMP=OTC-FP2116136014


谢谢,收获不小!
粗略看了下,基本技巧是当调他提供的js函数dhtmlHistory.add(newLocation,historyData)时,内部调用window.location.hash = newLocation;
效果是在location上加了"#xxx",当用户点后退钮,实际上会退到这个#xxx之前的location处,而不是跳出应用外。
而且会调用我们注册的js回调函数,这样就可以根据当前location的hash(锚点名),进行界面恢复工作。

疑问:历史记录中,有同一uri下只有#xx不同的多个页面,利用前进后退进行跳转,会触发onunload吗?该页的js会再次执行吗?上面的分析似乎隐喻了答案,但我不确信。连同下面对historyStorage的分析。


它对我的意义在于:一般情况下用户点后退钮立刻进行浏览器的默认行为,现在可以延缓,利用js进行语义重定义。我们系统没有用到ajax,不过利用这个特性,是不是可以结合服务器端标记历史记录,达到浏览器导航意义完全有效(真正符合设计者期望)呢?
设想了个思路(总是走老路):
在ww的interceptor中利用action名字特征,或根据某处声明,或在action中直接方法调用,-- 对以ThreadLocal式存放的history:Stack进行或不进行push(URL).
应用sitemesh,对每一个渲染的页面,均在body.onload时进行一次 enable延缓后退钮的 js操作。当用户点后退钮时,指定访问ww的global-action: historyBack。
historyBack中,从history:Stack中pop出URL,重定向回去。

麻烦在于
1.要生成好多带#xxx的中间页面,浏览器端的真正的历史记录会比较乱。
2.没考虑点前进钮时的情况,在点后退到一个地方,与点前进过去的,js通过什么办法区别。
3.页面本身要有#xxx情况时
4.要与服务器端交互
5.history:Stack什么时机下push?  是session方式保存?还是parameters方式传递,ThreadLocal方式保存? 还是在cookie中保存?
6.用户连续点两下后退按钮呢?

它的historyStorage利用了浏览器在历史记录中会缓存表单数据的特性,用隐藏表单结合JSON实现的。

另外,它可以判断出当前页面是第一次加载还是通过后退钮回来的,用一个叫firstLoad变量标记。这个判断手段要根据浏览器的不同 加上一些编程技巧实现的,没有深入理解,感觉挺好玩的。

另:gmail中我点链接时清楚的看到下面进度条有响应,怀疑不是XMLHttp方式,而且网址没变,大概也不是上面的思路。大家再深入say say呗~
0 请登录后投票
   发表时间:2005-10-31  
感觉gmail的后退的实现原理,应该是和这个demo中讲的差不多的,在这个demo中的浏览器的进度条也是可用的。和gmail中的情形差不多,不过在我的IE6中gmail的后退按钮用完后,前进按钮是不可用的,而demo中的前进按钮是可用的。另外感觉gmail中应该是使用的json再传递数据,可是我不能理解的是难道gmail中的页面显示的其他元素都是在js文件中写的,如果是这样,那实现起来岂不是很复杂,不过如果不是在js中实现的页面的解析,并没有发现有其他的配合那些json数据解析文件,gmail中的有个挺大的js文件,应该是经过混淆的,要么就是用程序生成的。看不懂,有对此比较了解的人请将一下,谢谢。
0 请登录后投票
   发表时间:2005-10-31  
下面一段话是在网上搜索到的:

对应用Ajax最主要的批评就是,它可能破坏浏览器后退按钮的正常行为(参见Jakob Nielsen's的《1999 Top-10 New Mistakes of Web Design》)。在动态更新页面的情况下,用户无法回到前一个页面状态,因为浏览器仅能记忆历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常会希望单击后退按钮能够取消他们的前一次操作,但是在Ajax应用程序中,这将无法实现。开发者们想出了种种办法来解决这个问题,大多数都是在用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)

一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics