【微信bug解决方案】微信 Android js reload失效 解决方案

如果你不幸踩到了微信浏览器中,js调用window.location.reload();完全没有效果这个坑,那么看看以下的解决方案将能帮你出坑


如果你问过了度娘,那么会看到这样的解决方案,使用window.location.href = window.location.href,楼主亲测是没有效果的,

另一种是在地址后面再加一个随机数或者时间戳比如

var date_obj = new Date();
window.location.href = window.location.href + '?timestamp=' + date_obj.getTime();

如果你原来的连接中本身就存在get参数,或者有#hash值,这样的方法就显得有点简单粗暴了

这里楼主做了一个完整的demo,能保证原来url上的所有get参数都在,并且#hash值也都在,只是在get参数中添加一个timestamp参数(如果已经刷新了一次有timestamp参数了,那么改变它的值)


<!DOCTYPE HTML>
<html>
<head>
<meta content="text/html" charset="utf-8" />
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>slice query_str</title>
<style>
div{
	border: 1px solid #000000;
	height: 300px;
}
</style>
<script src="../jquery-1.9.1.min.js"></script>
<script>
function get_query_str(){
	var location_url = window.location.href;
	
	var parameter_str = location_url.split('?')[1];
	parameter_str = parameter_str.split('#')[0];
	
	var $_GET = {};
	
	var parameter_arr = parameter_str.split('&');
	var tmp_arr;
	for(var i = 0, len = parameter_arr.length; i <= len -1; i++){
		tmp_arr = parameter_arr[i].split('=');
		$_GET[tmp_arr[0]] = decodeURIComponent(tmp_arr[1]);
	}
	
	window.$_GET = $_GET;
}
get_query_str();
</script>
</head>

<body>
<a href="javascript:;" id="J_reload_btn">reload</a>
<div id="J_result">
</div>
</body>
<script>
$(document).ready(function(){
	var date_obj = new Date();
	$('#J_result').html(date_obj.getTime()+'<br>'+JSON.stringify($_GET));
	
	$('#J_reload_btn').click(function(){
		/*
		window.location.reload();
		*/
		$_GET['timestamp'] = date_obj.getTime();
		
		var location_url = window.location.href;
		
		var url = location_url.split('?')[0];
		
		var hash_str = location_url.split('#')[1];
		
		var query_arr = [];
		for(var i in $_GET){
			query_arr.push(i+'='+$_GET[i]);
		}
		
		if(query_arr){
			url += '?' + query_arr.join('&');
		}
		
		if(hash_str){
			url += '#' + hash_str;
		}
		
		window.location.href = url;
	});
});
</script>
</html>

其中<head>中的函数是用来获取所有get参数的,上一篇文章(http://blog.csdn.net/snow_finland/article/details/52623047)已经介绍了。

当然如果能确定url带有多少参数,有没有hash,也可以简单的在后面加?timestamp={timestamp}或&timestamp={timestamp}进行处理,这里介绍的是一个比较周全的做法


posted @ 2016-09-22 15:29  snow_finland  阅读(277)  评论(0编辑  收藏  举报