Safariの痕跡のないブラウズはlocalStorageに影響します
3107 ワード
モバイル側でインタラクションを行うと、ローカルストレージlocalStorageを使用して変数を格納することがよくあります.
しかし、このように判断するだけでは十分ではありません.現在のブラウザには、痕跡のない閲覧という機能があります.その名の通り、ユーザーはホームページを閲覧する過程で何もキャッシュしないで、何も記録しないで、痕跡を残さないということです.
もちろん、localStorageも無効になっています.でも今はlocalStorageはnullではなく、元のlocalStorageオブジェクトですが、
このオブジェクトのメソッドは無効になりました.単純に上記の方法で判断するとjsは異常を投げ出す.
では、できないのではないでしょうか.
もちろん違います.localStorageとsessionStorageのほか、クッキーを使用して保存できることがわかります.
Safariが痕跡のないブラウズをオンにすると、ローカルストレージは異常を放出するので、異常をキャプチャすることでクッキーストレージを使用するかどうかを判断できます.
次はクッキーが格納する値と格納値です
ストレージをクリアするには、同じように異常を投げた場合にクッキーをクリアする必要があります.
if(window.localStorage){
localStorage.setItem('key','value');
}
しかし、このように判断するだけでは十分ではありません.現在のブラウザには、痕跡のない閲覧という機能があります.その名の通り、ユーザーはホームページを閲覧する過程で何もキャッシュしないで、何も記録しないで、痕跡を残さないということです.
もちろん、localStorageも無効になっています.でも今はlocalStorageはnullではなく、元のlocalStorageオブジェクトですが、
このオブジェクトのメソッドは無効になりました.単純に上記の方法で判断するとjsは異常を投げ出す.
では、できないのではないでしょうか.
もちろん違います.localStorageとsessionStorageのほか、クッキーを使用して保存できることがわかります.
Safariが痕跡のないブラウズをオンにすると、ローカルストレージは異常を放出するので、異常をキャプチャすることでクッキーストレージを使用するかどうかを判断できます.
var tracelesStorage=function(name, val){
if(arguments.length> 1){
try{
localStorage.setItem(name, val);
}catch(e){
setCookie(name,val,'d365');// cookie
}
}
else {
var dataStr='';
try{
localStorage.setItem('cookieTest', 'test');//
dataStr = localStorage.getItem(name);
}catch(e){
dataStr = getCookie(name)// cookie
}
return dataStr;
}
}
次はクッキーが格納する値と格納値です
var getCookie=function(name)// cookies
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)){
if(!arr[2]){
return null ;
}else if(arr[2] !='null'){
return unescape(arr[2]) ;
}else{
return null ;
};
}else{
return null;
}
}
// Cookie
var setCookie=function(name, value, time){
var strsec = getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec * 1);
document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString()+";path=/";
}
var getsec=function(str) {
var str1 = str.substring(1, str.length) * 1;
var str2 = str.substring(0, 1);
if (str2 == "s") {
return str1 * 1000;
} else if (str2 == "h") {
return str1 * 60 * 60 * 1000;
} else if (str2 == "d") {
return str1 * 24 * 60 * 60 * 1000;
}
}
ストレージをクリアするには、同じように異常を投げた場合にクッキーをクリアする必要があります.
var clearStorage=function(name){ //
if(!name) { return false;}
try{
localStorage.setItem('cookieTest', 'test');//
localStorage.removeItem(name);
}catch(e){
document.cookie = name + "=" + null + ";expires=" + 0+";path=/";// , cookie, cookie。
}
}