zoukankan      html  css  js  c++  java
  • Vue开发中踩坑-Day3

    Vue开发中踩坑-Day3

    昨天的本地储存问题,写了一个模块,根据MDN中给的算法,是的大多情况下都可用。

    function storageAvailable(type) {
      let storage;
      try {
        storage = window[type];
        let x = '__storage_test__';
        storage.setItem(x, x);
        storage.removeItem(x);
        return true;
      }
      catch(e) {
        return e instanceof DOMException && (
            // everything except Firefox
          e.code === 22 ||
          // Firefox
          e.code === 1014 ||
          // test name field too, because code might not be present
          // everything except Firefox
          e.name === 'QuotaExceededError' ||
          // Firefox
          e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
          // acknowledge QuotaExceededError only if there's something already stored
          (storage && storage.length !== 0);
      }
    }
    
    
    function enableLocalStorage() {
      if (!window.localStorage) {
        let s = '__cookie_test__';
        document.cookie = s
        if(document.cookie.indexOf(s) === -1) {
          alert('cookie不可用,请启用浏览器cookie')
          return false
        }
        Object.defineProperty(window, "localStorage", new (function () {
          let aKeys = [], oStorage = {};
          Object.defineProperty(oStorage, "getItem", {
            value: function (sKey) { return sKey ? this[sKey] : null; },
            writable: false,
            configurable: false,
            enumerable: false
          });
          Object.defineProperty(oStorage, "key", {
            value: function (nKeyId) { return aKeys[nKeyId]; },
            writable: false,
            configurable: false,
            enumerable: false
          });
          Object.defineProperty(oStorage, "setItem", {
            value: function (sKey, sValue) {
              if(!sKey) { return; }
              document.cookie = escape(sKey) + "=" + escape(sValue) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
            },
            writable: false,
            configurable: false,
            enumerable: false
          });
          Object.defineProperty(oStorage, "length", {
            get: function () { return aKeys.length; },
            configurable: false,
            enumerable: false
          });
          Object.defineProperty(oStorage, "removeItem", {
            value: function (sKey) {
              if(!sKey) { return; }
              document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
            },
            writable: false,
            configurable: false,
            enumerable: false
          });
          this.get = function () {
            let iThisIndx;
            for (let sKey in oStorage) {
              iThisIndx = aKeys.indexOf(sKey);
              if (iThisIndx === -1) { oStorage.setItem(sKey, oStorage[sKey]); }
              else { aKeys.splice(iThisIndx, 1); }
              delete oStorage[sKey];
            }
            for (aKeys; aKeys.length > 0; aKeys.splice(0, 1)) { oStorage.removeItem(aKeys[0]); }
            for (let aCouple, iKey, nIdx = 0, aCouples = document.cookie.split(/s*;s*/); nIdx < aCouples.length; nIdx++) {
              aCouple = aCouples[nIdx].split(/s*=s*/);
              if (aCouple.length > 1) {
                oStorage[iKey = unescape(aCouple[0])] = unescape(aCouple[1]);
                aKeys.push(iKey);
              }
            }
            return oStorage;
          };
          this.configurable = false;
          this.enumerable = true;
        })());
      }
      return true
    }
    
    if (!(storageAvailable('localStorage') || enableLocalStorage())) {
      alert('请关闭浏览器隐私模式或者启用cookie, 否则网站功能将出现异常!')
    }
    
    
  • 相关阅读:
    微信公共服务平台开发(.Net 的实现)5-------解决access_token过期的问题
    微信公共服务平台开发(.Net 的实现)4-------语音识别
    微信公共服务平台开发(.Net 的实现)3-------发送文本消息
    微信公共服务平台开发(.Net 的实现)2-------获得ACCESSTOKEN
    微信公共服务平台开发(.Net 的实现)1-------认证“成为开发者”
    checkboxlist 横向显示,自动换行
    VMware Workstation unrecoverable error: (vmx)虚拟机挂起后无法启动问题
    ASP.NET给DataGrid,Repeater等添加全选批量删除等功能
    redis 优缺点 使用场景
    redis消息队列
  • 原文地址:https://www.cnblogs.com/xunjishu/p/12957738.html
Copyright © 2011-2022 走看看