【微信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}進行處理,這裏介紹的是一個比較周全的做法


發佈了96 篇原創文章 · 獲贊 17 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章