E6与location.hash和Ajax历史记录 (转载)
为了在IE6中改变hash来保留历史记录实现ajax的前进后退,通常需要在页面内加入隐藏的iframe,对其open+close然后修改iframe的hash,再通过timer更新主窗口的hash,达到让主窗口生成历史记录的目的。
参见http://tkyk.github.com/jquery-history-plugin/
但是这样做有一个问题,ie6默认是打开导航音的,对于用户而言,如果用隐藏iframe实现ajax历史记录,则导航时会出现两次导航音,这是非常讨厌的。有什么办法解决这个问题呢?
如果是要让页面导航不发出声音,本身是不难的。用新建的iframe设置src后再添加进dom结构,就不会有导航音。
参见http://www.julienlecomte.net/blog/2007/11/30/
但这样创建的iframe,是不会被IE6认作浏览记录的。最后研究gmail的代码发现:
- 不用修改iframe的src,只是简单的在open close中插入一个write,就可以生成历史记录。
- 这样的修改,此iframe本身不会有导航音。于是总共只发出一次导航音,非常正常。
- 最好是在这个iframe的document中写入title标题,这个是历史记录的名字,便于用户查找。
- hash不再保存于iframe的document.location.hash,也不能直接挂靠在iframe上,而是应该放置于iframe的document内部,最简单还是用title节点
- iframe支持load事件,只要open write close就会触发,所以前进后退都可以用这个驱动。在ie6/7上都可以工作,类似于hashchange事件。
- https和http协议,最简单的iframe src都是javascript:0。
- 唯一的问题是:点击前进后退,仍然会有两次导航音,但这已经好很多了。
通过进一步的搜索发现,许多库的作者使用了open close,却仅仅是修改了hash,说明他们并没有意识到真正的问题所在。
相关推荐
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
Richardxx 2020-11-09
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03
TONIYH 2020-07-22
时光如瑾雨微凉 2020-07-19
83510998 2020-07-18
坚持着执着 2020-07-16
jiaguoquan00 2020-07-07
李永毅 2020-07-05
坚持着执着 2020-07-05