localstorages = {};
function getCookiesJson(){
????var cookieJson = {};
? ? var cookiesKeys =document.cookie.split(";");
? ? for(var i =0; i < cookiesKeys.length; i++){
????????var keyVal = cookiesKeys[i].split("=");
? ? ? ? if(keyVal[0] !=''){
????????????cookieJson[keyVal[0]] = keyVal[1];
? ? ? ? }
????}
????return cookieJson;
}
function pushCookiesJson(cookieJson){
????var _cookies ="";
? ? cookieJson['domain'] =document.domain; // cookie所作用的域
? ? cookieJson['max-age'] =60*60*24*90; // 過期時間
? ? cookieJson['path'] ='/'; // 所作用的路徑
? ? for(var keyin cookieJson){
????????_cookies += key +'=' + cookieJson[key] +';';
? ? }
????document.cookie = _cookies;
}
localstorages.set =function(key, value){
????var cookieJson =getCookiesJson();
? ? cookieJson[key] =escape(value);
? ? pushCookiesJson(cookieJson);
};
localstorages.get =function(key){
????var cookieJson =getCookiesJson();
? ? return unescape(cookieJson[key]);
};
localstorages.delete =function(){
????var cookieJson =getCookiesJson();
? ? delete cookieJson[key];
? ? pushCookiesJson(cookieJson);
};
注意的是(所提到的問題都是在Safari和chrome下驗證的)
1.第一個注意的是必須在一個服務下才能設置成功改艇,靜態(tài)頁面訪問無法通過js設置成功呼巴;如果通過webstorm起一個本地服務喉誊,會自動在cookie中生成一個key=WF_FPC的值牛郑,便無法自己設置cookie成功,但是修改為127.0.0.1訪問之后可設置成功签财;網(wǎng)上有人說localhost不是合法域名串慰,所以設置不成功,其實不是唱蒸,把key=WF_FPC刪除后就算用localhost訪問也能設置成功邦鲫,所以可以自己用node起一個服務,就不用擔心這個問題了
2.第二個需要注意的是必須要加編碼函數(shù)去給你的值進行編碼油宜,因為在Safari中設置cookie的時候如果有中文字符掂碱,設置的時候無法識別中文字符會直接丟棄中文字符
3.因為我用cookie是為了解決移動端無痕瀏覽的問題所以還涉及了一個localStorage的問題,眾所周知當開啟了無痕瀏覽的時候慎冤,調(diào)用localStorage.setItem會報錯疼燥,因為瀏覽器禁用了寫,但是可讀蚁堤。safari在localStorage對象的處理上有所不同醉者,不是在無痕瀏覽這個問題上,是當你通過靜態(tài)文件訪問頁面去設置本地存儲的時候披诗,Safari直接不會識別localStorage對象撬即,會報SecurityError (DOM Exception 18): The operation is insecure.這樣的安全錯誤。