HTML5,修改浏览器地址栏的URIL而不刷新页面代码

本文介绍如何利用HTML5技术在不刷新页面的情况下修改浏览器url,包括使用JavaScript进行DOM操作、历史状态管理、AJAX请求以及浏览器兼容性处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>HTML5 修改浏览器url而不刷新页面</title>
<script type="text/javascript">
var domLoaded = function(){
	if(ua != null && ua[1] < 10){
		alert('您的浏览器不支持');
		return ;
	}
	
	if(location.href.indexOf("?") > -1){
		var urlparts = location.href.match(/(.+?)\?.+/i);
		var urlbase = urlparts[1];
	}
	else{
		var urlbase = location.href;
	}
	var page = 58;
	var ua = window.navigator.userAgent.match(/msie (\d\.\d)/i);
	var content = document.getElementById("content");
	var loading = document.getElementById("loading");

	window.history.replaceState(
		{
			content:content.innerHTML,
			page:page
		},
		page,
		urlbase + (page > 1 ? '?page=' + page : '' )
	);
	
	var ajax = new XMLHttpRequest();
	var ajaxCallback = function(){
		if(ajax.readyState == 4){
			loading.style.display = 'none';
			content.innerHTML = ajax.responseText;
			window.history.pushState(
				{
					content:content.innerHTML,
					page:page
				},
				page,
				urlbase + "?page=" + page
			);
			next.href = urlbase + "?page=" + (page + 1);
		}
	};
	
	var next = document.getElementById('next');
	var nextClickEvent = function(event){
		if(loading.style.display != 'block'){
			loading.style.display = 'block';
			page++;
			ajax.open('GET', urlbase + '?page=' + page + '&ajaxload=on', true);
			ajax.onreadystatechange = ajaxCallback;
			ajax.send('');
			event.preventDefault();
		}
	};
	next.addEventListener('click', nextClickEvent, false);
	
	var popstate = function(){
		content.innerHTML = history.state.content;
		page = history.state.page;
	};
	window.addEventListener('popstate', popstate, false);
};

try{
	window.addEventListener('DOMContentLoaded', domLoaded, false);
}
catch(e){
	alert('您的浏览器不支持');	
}
</script>
</head>
<body>
	<p id="content">
		第58页的内容	</p>
	<p>
		<a id="next" href="?page=59">下一页</a>
	</p>
	<div id="loading" style="display:none;">
		加载中
	</div>
	<p>
		支持浏览器:
		<ul>
			<li>firefox 4+</li>
			<li>chrome 5+</li>
			<li>safari 5+</li>
			<li>opera 11.5+</li>
			<li>internet explorer 10 pp3+</li>
		</ul>
	</p>
	<p>
		可以看到,这个功能的实现也需要通过服务器的rewrite,开发框架的URL Router,或者通过后台脚本GET参数进行控制来配合好,这样才不会导致整个程序出错
	</p>
	<p>
		<em>建议打开firebug,并观察地址栏和ajax请求的返回内容</em>
	</p>
	<p>
		<a href="http://vifix.cn">vifix.cn</a>
	</p>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值