原因是:訪問頁面時,某些js方法還沒初始化(或者還沒有加載出來)此時調用肯定不執行。alert起到了延遲的功能,當用戶點擊確定此時要執行的js恰好初始化完成,能正常執行。
解決方法是 加setTimeout函數,延遲1秒執行js。
分析現象,逐個排查,找到問題的本質,想解決方案。
現象:在做手機端頁面開發使,有一個倒計時功能,正常使用沒問題。問題就出在當用戶從手機瀏覽器切換到其他應用在切到手機瀏覽器,這這段時間內倒計時器沒有執行,導致計數不准。
后來找到visibitilychange 事件,即頁面可見性。當用戶重新切換到瀏覽器時刷新頁面從服務器拿到最新的倒計時時間。
測試后發現新的問題來了,ios 可以完美刷新。Android 總是有時候刷新有時候不刷新。開始以為是visibilitychange瀏覽器兼容性問題,找了好久沒解決。
反復debug發現,visitilitychange 每次都能執行並alert 值出來。接着排查 將問題 js刷新 當前頁面。window.location.href=location.href。更換刷新代碼后問題依然存在。
百思不得其解,這個時候轉機出現了(念念不忘,終有回響),加入alert后每次都能正常刷新,去掉alert后就不刷新了。
這才找到問題發生的本質。
解決方法是:加setTimeout,1秒后執行刷新的操作
// 手機標簽切換事件 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); } }); }