zoukankan      html  css  js  c++  java
  • 跨浏览器的本地存储解决方案

    跨浏览器的本地存储多种方式,例如:
    1、localStorage:只支持IE8+、FireFox、Chrome、Opera等,不支持IE8以下的浏览器。
    2、浏览器Cookie:支持的数据存储量相对较少,每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉,有些浏览器甚至不支持;同时,Cookie存在安全性问题,如果cookie被人拦截了,就可以取得所有的session信息。
    3、可以在页面上嵌一个隐藏的Flash,然后使用Flash的Flash SharedObject,它基本上不会有兼容性问题,只有要额外的引入Flash和JS,但这样会增加页面负担。
    4、User Data: 是微软为IE专门在系统中开辟的一块存储空间(这个支持所有IE浏览器),只支持Windows+IE的组合(单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB。)
    综上,我们可以用以localStorage+User Data结合的方式来作为本地存储的解决方案:

    (function (window) {
        window.localDataStore = {
            hname: location.hostname ? location.hostname : 'localStatus',
            isLocalStorage: window.localStorage ? true : false,
            dataDom: null,
            initDom: function () {
                if (!this.dataDom) {
                    try {
                        this.dataDom = document.createElement('input'); 
                        this.dataDom.type = 'hidden';
                        this.dataDom.style.display = "none";
                        this.dataDom.addBehavior('#default#userData'); 
                        document.body.appendChild(this.dataDom);
                        var exDate = new Date();
                        exDate = exDate.getDate() + 30;
                        this.dataDom.expires = exDate.toUTCString(); 
                    } catch (ex) {
                        return false;
                    }
                }
                return true;
            },
            set: function (key, value) {
                if (this.isLocalStorage) {
                    window.localStorage.setItem(key, value);
                } else {
                    if (this.initDom()) {
                        this.dataDom.load(this.hname);
                        this.dataDom.setAttribute(key, value);
                        this.dataDom.save(this.hname)
                    }
                }
            },
            get: function (key) {
                if (this.isLocalStorage) {
                    return window.localStorage.getItem(key);
                } else {
                    if (this.initDom()) {
                        this.dataDom.load(this.hname);
                        return this.dataDom.getAttribute(key);
                    }
                }
            },
            remove: function (key) {
                if (this.isLocalStorage) {
                    localStorage.removeItem(key);
                } else {
                    if (this.initDom()) {
                        this.dataDom.load(this.hname);
                        this.dataDom.removeAttribute(key);
                        this.dataDom.save(this.hname)
                    }
                }
            }
        }
    })(window);
  • 相关阅读:
    背包问题
    標準差、方差、正太分佈公式
    C#實現XML的增刪查改
    XML的基礎結構
    微信小程序入門學習資料鏈接
    微信小程序wxml無法實現頁面跳轉的問題
    088_jsp转成成servle所在的路径?
    075_jsp如何debug?
    028_Mybatis返回int类型为空时报错 attempted to return null from a method with a primitive return type (int)
    087_数据库类型
  • 原文地址:https://www.cnblogs.com/sntetwt/p/3599776.html
Copyright © 2011-2022 走看看