欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

E6与location.hash和Ajax历史记录 (转载)

程序员文章站 2024-01-18 13:43:22
...

为了在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的代码发现:

  1. 不用修改iframe的src,只是简单的在open close中插入一个write,就可以生成历史记录。
  2. 这样的修改,此iframe本身不会有导航音。于是总共只发出一次导航音,非常正常。
  3. 最好是在这个iframe的document中写入title标题,这个是历史记录的名字,便于用户查找。
  4. hash不再保存于iframe的document.location.hash,也不能直接挂靠在iframe上,而是应该放置于iframe的document内部,最简单还是用title节点
  5. iframe支持load事件,只要open write close就会触发,所以前进后退都可以用这个驱动。在ie6/7上都可以工作,类似于hashchange事件。
  6. https和http协议,最简单的iframe src都是javascript:0。
  7. 唯一的问题是:点击前进后退,仍然会有两次导航音,但这已经好很多了。

通过进一步的搜索发现,许多库的作者使用了open close,却仅仅是修改了hash,说明他们并没有意识到真正的问题所在。

 

原文地址:http://blog.sina.com.cn/s/blog_6e7f61f30100sddm.html