localStorage相容ie6/7 用addBehavior 實現

来源:http://www.cnblogs.com/tongchuanxing/archive/2016/07/12/5664379.html
-Advertisement-
Play Games

製作過程我就不說了,程式下麵會占出來 調用程式 我只是簡單測試了一下可以,不知道哪裡還有問題,望指點一二!!!!! ...


製作過程我就不說了,程式下麵會占出來

define(function(){
    if('localStorage' in window) return;
    function Storage(){
        this.box = document.body || document.getElementByTagName('head')[0] || document.documentElement;
        this.name = 'localStorage'
        this.data = document.createElement(this.name);
        this.data.addBehavior("#default#userData");
        this.box.appendChild(this.data);
        this.map = [];
        this.length = this.length();
    }
    Storage.prototype.setItem = function(name,val){
        if(name=='localStorage-map'){
            throw new Error("this is localStorage in key [localStorage-map] not use!")
            return ;
        }
        if(this.map.length==0){
            this.data.load('localStorage-map');
            var data = this.data.getAttribute('localStorage-map');
            if(data!=null){
                this.map = data.split(',');
            }
        }
        var flag = true;
        for(var i in this.map){
            if(this.map[i] == name){
                flag = false;
            }
        }
        if(flag){
            this.map.push(name)
        }
        this.data.setAttribute(name,val);
        var date = new Date();
        date.setDate(date.getDate()+700);
        this.data.expires = date.toUTCString();
        this.data.save(name);
        this.data.setAttribute('localStorage-map',this.map);
        this.data.save('localStorage-map');
    }
    Storage.prototype.getItem = function(name){
        if(name == 'localStorage-map'){
            throw new Error("this is localStorage in key [localStorage-map] not use!");
            return;
        }
        this.data.load(name);
        return this.data.getAttribute(name);
    };
    Storage.prototype.length = function(){
        if(this.map.length==0){
            this.data.load('localStorage-map');
            var data = this.data.getAttribute('localStorage-map');
            if(data!=null){
                this.map = data.split(',');
            }
        }
        for (var i = this.map.length - 1; i >= 0; i--) {
            alert(this.getItem(this.map[i]))
            if(this.getItem(this.map[i])==undefined || this.getItem(this.map[i])==""){
                this.map.splice(i,1);
            }
        }
        return this.map.length;
    };
    Storage.prototype.removeItem = function(name){
        if(typeof name=="undefined" || name=="") return;
        if(this.map.length==0){
            if(this.getItem('localStorage-map')!=null){
                this.map = this.getItem('localStorage-map').split(',');
            }
        }
        for(var i in this.map){
            if(this.map[i] == name){
                this.map.splice(i,1);
            }
        }
        this.data.load(name);
        this.data.setAttribute(name,undefined);
        this.data.save(name);
        return true;
    },
    Storage.prototype.clear=function(){
        if(this.map.length==0){
            if(this.getItem('localStorage-map')!=null){
                this.map = this.getItem('localStorage-map').split(',');
            }
        }
        for(var i in this.map){
            this.removeItem(this.map[i]);
        }
    }
    window.localStorage = new Storage();
});

調用程式 

localStorage.setItem('value','{askdjf:ddd}')
            localStorage.setItem('name','{ddddddd:ddd}')
            alert(localStorage.getItem('value'))
            alert(localStorage.getItem('name'))
            alert(localStorage.removeItem('name'))
            alert(localStorage.length);

我只是簡單測試了一下可以,不知道哪裡還有問題,望指點一二!!!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前文Selenium2入門(一)說到Selenium是Web 應用程式測試框架,那麼如果對一個簡單的web應用需求:打開瀏覽器,登錄百度首頁,輸入“歐洲杯”關鍵詞,點擊搜索按鈕 這一系列操作,能否用Selenium進行執行呢?可以,下麵介紹的WebDriver就是可以完成這項任務的方法之一: Web ...
  • 目錄: 1.StringBuffer和StringBuilder有什麼區別?假設有一個方法,方法內部需要定義一個對象,可能是StringBuffer或StringBuilder,接下來會多次append操作,方法結束時,返回這個對象的toString()結果,並且這個線程會被多線程併發訪問,請選擇這 ...
  • 回到目錄 關於依賴倒置(DIP) 高層模塊不依賴於低層模塊的實現,而低層模塊依賴於高層模塊定義的介面,通俗的講,就是高層模塊定義介面,低層模塊負責實現,這在我們實際開發中經常被用到,層與層之間引用,經常被添加一個介面層去隔離,在介面層定義相關業務規範,而底層去實現它,高層只引用這個介面,當高級需要其 ...
  • 回到目錄 對於一個後臺管理系統來說,你的許可權設計與安全是重中之重,當你為一個許可權分配一些菜單後,當這個許可權的用戶沒有菜單許可權時,這個菜單的URL是不可以被用戶訪問的,而在之前的設計中,沒有考慮到這點,所以本次Lind.DDD.Manager的升級中,需要把這塊完善一下,將會在8月的Lind.DDD中 ...
  • 上一篇《[讓 Generator 自啟動][generator]》介紹了通過起動器讓 Generator 跑起來,而本篇採用 async 實現更優雅的非同步編程。 <! more 從例子開始 借用上一篇例子中的例子說起。 然後,我們需要寫一個啟動器來啟動這個函數。 而採用 async 寫,代碼則是: ...
  • × 目錄 [1]靜態方法 [2]構造函數 [3]實例方法 前面的話 Date對象是javascript語言中內置的數據類型,用於提供日期和時間的操作介面。Date對象是在早期java中的java.util.Date類基礎上創建的,為此,Date類型使用自UTC1970年1月1日0點開始經過的毫秒數來 ...
  • [1]標準時間 [2]字元串 [3]閏年 [4]月日 [5]星期 [6]時分秒 ...
  • jquery.validate.js使用記錄 首先到JQ官網下載搜索validate插件,下載相關源碼,附上validate官網網址 https://jqueryvalidation.org/ 找到validation\demo\bootstrap,參考bootstrap與volidate結合使用的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...