js 加alert後才能執行方法

緣由是:訪問頁面時,某些js方法還沒初始化(或者尚未加載出來)此時調用確定不執行。alert起到了延遲的功能,當用戶點擊肯定此時要執行的js剛好初始化完成,能正常執行。javascript

解決方法是 加setTimeout函數,延遲1秒執行js。java

 

分析現象,逐個排查,找到問題的本質,想解決方案。ios

 

現象:在作手機端頁面開發使,有一個倒計時功能,正常使用沒問題。問題就出在當用戶從手機瀏覽器切換到其餘應用在切到手機瀏覽器,這這段時間內倒計時器沒有執行,致使計數不許。瀏覽器

    後來找到visibitilychange 事件,即頁面可見性。當用戶從新切換到瀏覽器時刷新頁面從服務器拿到最新的倒計時時間。服務器

測試後發現新的問題來了,ios 能夠完美刷新。Android 老是有時候刷新有時候不刷新。開始覺得是visibilitychange瀏覽器兼容性問題,找了很久沒解決。函數

反覆debug發現,visitilitychange 每次都能執行並alert 值出來。接着排查 將問題 js刷新 當前頁面。window.location.href=location.href。更換刷新代碼後問題依然存在。測試

百思不得其解,這個時候起色出現了(念念不忘,終有迴響),加入alert後每次都能正常刷新,去掉alert後就不刷新了。spa

這才找到問題發生的本質。debug

解決方法是:加setTimeout,1秒後執行刷新的操做blog

// 手機標籤切換事件
function visibilityChange() {
	document.addEventListener('visibilitychange', function() { 
		var u = navigator.userAgent;
		if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {  
			//alert(document.visibilityState);
			if(document.visibilityState=='visible'){
				setTimeout(function() {
					location.reload();
				}, 1000);
			}  
		} else if (u.indexOf('iPhone') > -1) { 
			location.reload();
		}  else {
			setTimeout(function() {
				location.reload();
			}, 1000);
		} 
		 
	});
}
相關文章
相關標籤/搜索