CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  Ajax

如何配合IE的地址栏记录用户操作历史

楼主emu(月亮不在手指尖上)2006-03-03 18:23:52 在 Web 开发 / Ajax 提问

原文发表在   http://www.blogjava.net/emu/archive/2006/03/03/33518.html  
   
  Ajax七宗罪第五宗里面,作者讽刺Ajax需要一个“没有back和history的浏览器”。很讽刺吗?只是作者这么想罢了。至少要让Ajax应用支持Forward和Back,并不需要什么了不起的技术,我们也不需要这样的浏览器来改变用户习惯,事实上我们完全能做到让Forward和Back更酷。  
   
  这是一个示范页面:  
  index.htm   <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.0   Transitional//EN">  
  <HTML>  
  <HEAD>  
  <TITLE>   emu's   ajax   bac,/forward   sample   </TITLE>  
  <META   NAME="Author"   CONTENT="emu">  
  <META   NAME="Keywords"   CONTENT="ajax   history">  
  <META   NAME="Description"   CONTENT="这个例子演示了如何不跳转页面而配合IE的前进、后退按钮记录用户交互历史">  
  </HEAD>  
  <BODY>  
   
  <textarea   cols=80   rows=30   id=t   onkeypress="checkSave()">请在此处输入</textarea>  
   
  <iframe   name=historyFrame   width=0   height=0   src="hiddenpage.htm?0#0"></iframe>  
  <SCRIPT   LANGUAGE="JavaScript">  
  <!--  
  historyFrame.history.go(-999)  
  var   maxHistory=100;  
  var   historyList=[];  
  var   historyOffset=0;  
  var   timer;  
  function   checkSave(){  
          if(timer)clearTimeout(timer);  
          timer=setTimeout(saveHistory,500);  
  }  
  function   saveHistory(){  
          if(t.value==t.oldValue)   return;  
          historyList[historyOffset]=t.oldValue;  
          historyOffset++;  
          historyList.length=historyOffset  
          t.oldValue=t.value;  
          var   url   =   historyFrame.location.protocol+"//"+historyFrame.location.pathname+"?";  
          historyFrame.location=url+historyOffset+"#"+historyOffset;  
          t.focus();  
  }  
  function   gotoHistory(n){  
          if(n<historyOffset){  
                  historyList[historyOffset]=t.value;  
          }else   if(n>historyOffset){  
          }else   return;  
          historyOffset=n;  
          t.value=historyList[historyOffset];  
          t.focus();  
  }  
   
  window.onload=function(){  
          t.oldValue=t.value;  
  }  
   
  //-->  
  </SCRIPT>  
  </BODY>  
  </HTML>  
   
   
  需要一个简单的页面放在同一目录下面:  
  hiddenpage.htm  
  <HTML>  
  <BODY   onload="gotoHistory()">  
  <SCRIPT>  
  function   gotoHistory(){  
          parent.gotoHistory(location.search.substr(1))  
  }  
  </SCRIPT>  
  </BODY>  
  </HTML>  
   
  好了,打开index页面,在文本区域里面做一些输入,然后试试IE的前进和后退按钮能提供多酷的功能。  
   
  这个方法由emu的好朋友twinson首先提出来,以后我们就叫它twinson方法吧。  
   
  全部原码点击这里下载:http://www.blogjava.net/Files/emu/ajax%20history.zip    
  问题点数:1、回复次数:2Top

1 楼hax(海曦)回复于 2006-03-03 20:32:49 得分 0

这个方法有个缺陷,虽然解决了history问题,但是没有解决bookmark问题。Top

2 楼emu(月亮不在手指尖上)回复于 2006-03-06 00:06:14 得分 0

嗯,果然是行家。  
  bookmark问题的解决要通过提供静态链接,和history的解决完全是两个方面。两个问题被摆到一起来置疑Ajax,只能说置疑Ajax的人并不明白在Ajax世界有些游戏规则已经不同从前了。  
  通过被你称为的query的技术,静态链接的提供并不为难,但是会造成静态页面重复加载的问题,确实我现在也还没有很好的解决方案。但是这个问题也不应该成为置疑Ajax的理由,因为在旧的Web模式下这些链接本来也是表现为不同的url需要被重复加载的,可以说Ajax也是受到旧模式的拖累。Top

相关问题

  • 如何操作IE的上网历史记录
  • 记录集操作问题
  • 如何删除ie地址栏中得历史地址记录
  • delphi中操作多条记录 ...
  • 求救:RecordSet 记录集的操作
  • 38万 条记录 如何操作啊!?
  • 救急!记录操作问题???
  • VFP6.0插入记录的操作问题
  • 记录并行操作的问题
  • 如何清除历史操作记录?

关键词

  • .net

得分解答快速导航

  • 帖主:emu

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo