localStorage關於ios10如下隱私模式不可用的問題

問題

最近老項目會員中心上報了一個問題,報錯以下:javascript


部分用戶在登陸時會出現報錯的狀況,出現頻率大概是每三天有一兩個。 根據報錯,很明顯是setItem的問題。查看web docs沒有說有兼容性問題java


繼續瞭解,發現localstorage對ios11如下隱私模式有兼容問題,調用setItem會報錯。即ios11如下的隱私模式不支持localstorageios

解決辦法

思路是在不兼容的瀏覽器(模式)下使用cookies來替代localstorageweb

const _isLocalStorageSupported = function() {    
    try {        
        window.localStorage.setItem('test', 1)        
        window.localStorage.removeItem('test')        
        return true    
    }catch(err) {        
        return false    
    }
}

const getStorage = function(key) { ///localStorage.getItem / cookies 
    let res = ''    
    if(_isLocalStorageSupported()) {        
        res = window.localStorage.getItem(key)    
    }else { ///cookie 
        let name = `${key}=`        
        let ca = document.cookie.split(';')        
        for(let i=0; i<ca.length; i++) {            
            let c = ca[i].trim()            
            if (c.indexOf(name) === 0) {                 
                res = c.substring(name.length, c.length)            
            }        
        }    
    }    
    return res
}

const setStorage = function(key, val) { ///localStorage.setItem / cookies 
    if(_isLocalStorageSupported()) {        
        window.localStorage.setItem(key, val)    
    }else { ///cookie 
        let d = new Date();        
        d.setTime(d.getTime()+(30*24*60*60*1000));        
        let expires = `expires=${d.toGMTString()}`;        
        document.cookie = `${key}=${val}; ${expires}`;    
    }
}複製代碼

封裝set和get的全局公共方法promise

補充

關於爲啥 unhandled promise rejection 我有點不理解瀏覽器


我是作了catch處理的,這個setItem是在.then()回調裏執行的,應該被正常catch而不至於最後被進程捕獲。很奇怪,有沒有大佬知道緣由的,歡迎評論告訴我,謝謝。cookie

相關文章
相關標籤/搜索