Microsoft ASP.NET Futures (July 2007)中History在客户端的使用(即不必安装ASP.NET Futures)

Microsoft ASP.NET Futures (July 2007)中有一个新的控件 “History”可以在Ajax中使用浏览器上的前进、后退按钮,但我们的主机上有时不必因为这一个功能就安一个Microsoft ASP.NET Futures,它版本更新很快,而且有时候,服务器提供者也未必愿意进行安装,而开发者又想有让用户有更好体验,那怎么办呢,我们先从基本的使用入手 ,我们再一步步将其提取为客户端可以使用的代码

它的用法在官方网站上已经给出
官方示例(服务器端)
http://quickstarts.asp.net/Futures/ajax/samples/history1.aspx
官居方源代码
http://quickstarts.asp.net/Futures/util/srcview.aspx?path=~/ajax/samples/history1.src

官居方示例(客户端使用,但仍未脱离Microsoft ASP.NET Futures)
http://quickstarts.asp.net/Futures/ajax/samples/history2.aspx
源代码
http://quickstarts.asp.net/Futures/util/srcview.aspx?path=~/ajax/samples/history2.src
其 实上面代码引用的是PreviewScript.js文件,这个可以在X\Program Files\Microsoft ASP.NET\ASP.NET Futures July 2007\v1.2.61025\ScriptLibrary\Microsoft.Web.Preview\1.2.61025.0中找到

在客户端使用它是最理想的情况,可且的确,用它自给的PreviewScript.js(145K)文件也是有点过大了
所以经过精简,我得到了一个小的精简版本,未压缩的情况下只有16K,压缩后估计在3K上下
http://dl2.csdn.net/down4/20070919/19082247681.js

但发现此版本在FF下工作正常,而IE下却有问题,经过反复研究,发现IE下必须添加一个Iframe来保存历史记录

于是有了以下Js段
function isIE(){ //ie? 
    if (window.navigator.userAgent.indexOf("MSIE")>=1
        
return true
    
else 
        
return false
}
这是来判断是否是IE
function InitHistory(){
    
if(isIE){//Ie的情况下,要通过iframe来完成
    var i = document.createElement("<iframe id="__historyFrame" style='display:none;' src='/Template/History.htm' scrolling='no' frameborder='0' />");
    
var d=$get("extendDiv6");
    d.innerHTML
=i;
    }
    Sys.Application.add_init(
function() {
          
var h = Sys.Application.get_history();
          h.setServerId(
"History1""History1");
    })
}

动态添加一个iframe(注意ID一定是__historyFrame

下面是页面完整代码 basic.js即为上面两段代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
    
<script type="text/javascript">
            
function pageLoad() {
            $addHandler($get(
"clientButton1"), "click", clientClick);
             $addHandler($get(
"clientButton2"), "click", clientClick);
        }
        
function pageNavigate(sender, args) {
            
var val = args.get_state().pageClientState || 0;
            $get(
"div2").innerHTML = val;
        }
        
        
function clientClick(e) {
            
var val = parseInt(e.target.value);
            $get(
"div2").innerHTML = val;
            Sys.Application.get_history().addHistoryPoint({pageClientState: val});
       }
    
</script>
</head>
<body>
    
<script type="text/javascript" src="JavaScript/MicrosoftAjax.js"></script>
<script type="text/javascript" src="JavaScript/Basic.js"></script>
<script type="text/javascript" src="JavaScript/Preview/history.js"></script>
<div id="div2"></div>
<form id="form1">
<href="#123" id="permalink">Permalink</a>
        
<input id="clientButton1" type="button" value="1" />
        
<input id="clientButton2" type="button" value="2" />
<div id="
extendDiv6" style="display:none"></div>
    </form>
    
<script type="text/javascript">
InitHistory();
</script>
</body>
</html>
这样就可以实现在Ajax里使用前进后退按钮而不必安装Microsoft ASP.NET Futures也能用History了

注:History 还不支持Opera希望在下一版本中可以支持
http://blog.csdn.net/chsword/archive/2007/09/19/1790664.aspx

posted @ 2007-09-19 08:40 重典 阅读(2539) 评论(10)  编辑 收藏 所属分类: Web前端UI开发

  回复  引用  查看    
#1楼 2007-09-19 08:54 | Leepy      
extendDiv6是在哪里的层id?
  回复  引用  查看    
#2楼 [楼主]2007-09-19 08:58 | 邹健      
晕了,不小心删掉了,随意加一个style="display:none"的div就可以了
  回复  引用  查看    
#3楼 [楼主]2007-09-19 09:01 | 邹健      
@Leepy
已经加上了,粗心大意的,给您带来不便,不好意思了
  回复  引用  查看    
#4楼 2007-09-19 10:15 | Leepy      
请问怎样让pageNavigate(sender,args)发生事件?
  回复  引用  查看    
#5楼 2007-09-19 10:21 | GoGoSonny      
就只支持IE吗?
  回复  引用  查看    
#6楼 [楼主]2007-09-19 10:25 | 邹健      
@Leepy
引用 MicrosoftAjax库就自动发生了,
  回复  引用  查看    
#7楼 [楼主]2007-09-19 10:25 | 邹健      
@GoGoSonny
现在 支持IE和FF,不支持Opera,其它浏览器未测
  回复  引用    
#8楼 2007-09-21 15:05 | weiyashi [未注册用户]
易虎互联 (www.easyhoo.cn)是在现有网络文化内涵的基础上,以全新的网络理念、先进的网络技术和企业管理模式建构的。本公司以多种网络经营为载体,致力于为广大用户提供:00各行业各领域、“先进的 、易懂的 、实用的、 普及的”网络商务平台,是一家拥有多元化营销网络及专业服务网络的高科技公司。 2007年易虎互联深入分析互联网行业,对大量企业网站调研,针对当前企业网站的弊端,提出“营销型”网站概念,掀起广州新一轮的企业建网风暴,开创广州企业网站建设蓝海。我们的口号:“绝不做没有销售力的网站!”


  回复  引用    
#9楼 2008-08-25 18:18 | Redfire0922 [未注册用户]
真是牛人。
  回复  引用  查看    
#10楼 [楼主]2008-08-25 18:47 | 重典      
@Redfire0922
谢谢夸奖,如此旧文还有人看,ms微软已经将这个History做为单独功能发布了

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-09-24 07:37 编辑过


相关链接: