最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS基于FileSaver.js插件實現(xiàn)文件保存功能示例 原創(chuàng)

原創(chuàng)  更新時間:2016年12月08日 10:09:05   原創(chuàng) 投稿:shichen2014  
這篇文章主要介紹了JS基于FileSaver.js插件實現(xiàn)文件保存功能,結(jié)合實例形式演示了FileSaver.js插件的具體使用技巧,需要的朋友可以參考下

本文實例講述了JS基于FileSaver.js插件實現(xiàn)文件保存功能。分享給大家供大家參考,具體如下:

這里介紹一款js插件用法非常簡單,先來看看FileSaver.js插件源碼:

復制代碼 代碼如下:

/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
var saveAs=saveAs||function(e){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var t=e.document,n=function(){return e.URL||e.webkitURL||e},r=t.createElementNS("http://www.w3.org/1999/xhtml","a"),i="download"in r,o=function(e){var t=new MouseEvent("click");e.dispatchEvent(t)},a=/Version\/[\d\.]+.*Safari/.test(navigator.userAgent),f=e.webkitRequestFileSystem,u=e.requestFileSystem||f||e.mozRequestFileSystem,s=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},c="application/octet-stream",d=0,l=500,w=function(t){var r=function(){if(typeof t==="string"){n().revokeObjectURL(t)}else{t.remove()}};if(e.chrome){r()}else{setTimeout(r,l)}},p=function(e,t,n){t=[].concat(t);var r=t.length;while(r--){var i=e["on"+t[r]];if(typeof i==="function"){try{i.call(e,n||e)}catch(o){s(o)}}}},v=function(e){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)){return new Blob(["\ufeff",e],{type:e.type})}return e},y=function(t,s,l){if(!l){t=v(t)}var y=this,m=t.type,S=false,h,R,O=function(){p(y,"writestart progress write writeend".split(" "))},g=function(){if(R&&a&&typeof FileReader!=="undefined"){var r=new FileReader;r.onloadend=function(){var e=r.result;R.location.href="data:attachment/file"+e.slice(e.search(/[,;]/));y.readyState=y.DONE;O()};r.readAsDataURL(t);y.readyState=y.INIT;return}if(S||!h){h=n().createObjectURL(t)}if(R){R.location.href=h}else{var i=e.open(h,"_blank");if(i==undefined&&a){e.location.href=h}}y.readyState=y.DONE;O();w(h)},b=function(e){return function(){if(y.readyState!==y.DONE){return e.apply(this,arguments)}}},E={create:true,exclusive:false},N;y.readyState=y.INIT;if(!s){s="download"}if(i){h=n().createObjectURL(t);r.href=h;r.download=s;setTimeout(function(){o(r);O();w(h);y.readyState=y.DONE});return}if(e.chrome&&m&&m!==c){N=t.slice||t.webkitSlice;t=N.call(t,0,t.size,c);S=true}if(f&&s!=="download"){s+=".download"}if(m===c||f){R=e}if(!u){g();return}d+=t.size;u(e.TEMPORARY,d,b(function(e){e.root.getDirectory("saved",E,b(function(e){var n=function(){e.getFile(s,E,b(function(e){e.createWriter(b(function(n){n.onwriteend=function(t){R.location.href=e.toURL();y.readyState=y.DONE;p(y,"writeend",t);w(e)};n.onerror=function(){var e=n.error;if(e.code!==e.ABORT_ERR){g()}};"writestart progress write abort".split(" ").forEach(function(e){n["on"+e]=y["on"+e]});n.write(t);y.abort=function(){n.abort();y.readyState=y.DONE};y.readyState=y.WRITING}),g)}),g)};e.getFile(s,{create:false},b(function(e){e.remove();n()}),b(function(e){if(e.code===e.NOT_FOUND_ERR){n()}else{g()}}))}),g)}),g)},m=y.prototype,S=function(e,t,n){return new y(e,t,n)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(e,t,n){if(!n){e=v(e)}return navigator.msSaveOrOpenBlob(e,t||"download")}}m.abort=function(){var e=this;e.readyState=e.DONE;p(e,"abort")};m.readyState=m.INIT=0;m.WRITING=1;m.DONE=2;m.error=m.onwritestart=m.onprogress=m.onwrite=m.onabort=m.onerror=m.onwriteend=null;return S}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return saveAs})}

源碼可讀性不敢恭維,讓我們用本站的JS在線工具:http://tools.jb51.net/code/js 格式化一下,方便以后閱讀研究。

格式化后的代碼如下:

/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
var saveAs = saveAs ||
function(e) {
  "use strict";
  if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
    return
  }
  var t = e.document,
  n = function() {
    return e.URL || e.webkitURL || e
  },
  r = t.createElementNS("http://www.w3.org/1999/xhtml", "a"),
  i = "download" in r,
  o = function(e) {
    var t = new MouseEvent("click");
    e.dispatchEvent(t)
  },
  a = /Version\/[\d\.]+.*Safari/.test(navigator.userAgent),
  f = e.webkitRequestFileSystem,
  u = e.requestFileSystem || f || e.mozRequestFileSystem,
  s = function(t) { (e.setImmediate || e.setTimeout)(function() {
      throw t
    },
    0)
  },
  c = "application/octet-stream",
  d = 0,
  l = 500,
  w = function(t) {
    var r = function() {
      if (typeof t === "string") {
        n().revokeObjectURL(t)
      } else {
        t.remove()
      }
    };
    if (e.chrome) {
      r()
    } else {
      setTimeout(r, l)
    }
  },
  p = function(e, t, n) {
    t = [].concat(t);
    var r = t.length;
    while (r--) {
      var i = e["on" + t[r]];
      if (typeof i === "function") {
        try {
          i.call(e, n || e)
        } catch(o) {
          s(o)
        }
      }
    }
  },
  v = function(e) {
    if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)) {
      return new Blob(["\ufeff", e], {
        type: e.type
      })
    }
    return e
  },
  y = function(t, s, l) {
    if (!l) {
      t = v(t)
    }
    var y = this,
    m = t.type,
    S = false,
    h, R, O = function() {
      p(y, "writestart progress write writeend".split(" "))
    },
    g = function() {
      if (R && a && typeof FileReader !== "undefined") {
        var r = new FileReader;
        r.onloadend = function() {
          var e = r.result;
          R.location.href = "data:attachment/file" + e.slice(e.search(/[,;]/));
          y.readyState = y.DONE;
          O()
        };
        r.readAsDataURL(t);
        y.readyState = y.INIT;
        return
      }
      if (S || !h) {
        h = n().createObjectURL(t)
      }
      if (R) {
        R.location.href = h
      } else {
        var i = e.open(h, "_blank");
        if (i == undefined && a) {
          e.location.href = h
        }
      }
      y.readyState = y.DONE;
      O();
      w(h)
    },
    b = function(e) {
      return function() {
        if (y.readyState !== y.DONE) {
          return e.apply(this, arguments)
        }
      }
    },
    E = {
      create: true,
      exclusive: false
    },
    N;
    y.readyState = y.INIT;
    if (!s) {
      s = "download"
    }
    if (i) {
      h = n().createObjectURL(t);
      r.href = h;
      r.download = s;
      setTimeout(function() {
        o(r);
        O();
        w(h);
        y.readyState = y.DONE
      });
      return
    }
    if (e.chrome && m && m !== c) {
      N = t.slice || t.webkitSlice;
      t = N.call(t, 0, t.size, c);
      S = true
    }
    if (f && s !== "download") {
      s += ".download"
    }
    if (m === c || f) {
      R = e
    }
    if (!u) {
      g();
      return
    }
    d += t.size;
    u(e.TEMPORARY, d, b(function(e) {
      e.root.getDirectory("saved", E, b(function(e) {
        var n = function() {
          e.getFile(s, E, b(function(e) {
            e.createWriter(b(function(n) {
              n.onwriteend = function(t) {
                R.location.href = e.toURL();
                y.readyState = y.DONE;
                p(y, "writeend", t);
                w(e)
              };
              n.onerror = function() {
                var e = n.error;
                if (e.code !== e.ABORT_ERR) {
                  g()
                }
              };
              "writestart progress write abort".split(" ").forEach(function(e) {
                n["on" + e] = y["on" + e]
              });
              n.write(t);
              y.abort = function() {
                n.abort();
                y.readyState = y.DONE
              };
              y.readyState = y.WRITING
            }), g)
          }), g)
        };
        e.getFile(s, {
          create: false
        },
        b(function(e) {
          e.remove();
          n()
        }), b(function(e) {
          if (e.code === e.NOT_FOUND_ERR) {
            n()
          } else {
            g()
          }
        }))
      }), g)
    }), g)
  },
  m = y.prototype,
  S = function(e, t, n) {
    return new y(e, t, n)
  };
  if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
    return function(e, t, n) {
      if (!n) {
        e = v(e)
      }
      return navigator.msSaveOrOpenBlob(e, t || "download")
    }
  }
  m.abort = function() {
    var e = this;
    e.readyState = e.DONE;
    p(e, "abort")
  };
  m.readyState = m.INIT = 0;
  m.WRITING = 1;
  m.DONE = 2;
  m.error = m.onwritestart = m.onprogress = m.onwrite = m.onabort = m.onerror = m.onwriteend = null;
  return S
} (typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content);
if (typeof module !== "undefined" && module.exports) {
  module.exports.saveAs = saveAs
} else if (typeof define !== "undefined" && define !== null && define.amd != null) {
  define([],
  function() {
    return saveAs
  })
}

使用的時候非常簡單,代碼如下所示:

var blob = new Blob(['out_put_string'], {type: "text/plain;charset=utf-8"});//out_put_string為需要保存到文件的字符串內(nèi)容
saveAs(blob, "filename.php");//filename.php為保存的文件名

PS:本站在線工具《PHP代碼在線格式化美化工具》中的保存文本功能使用的就是FileSaver.js插件實現(xiàn)的。感興趣的朋友可以參考一下:

http://tools.jb51.net/code/phpformat

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript擴展技巧總結(jié)》、《JavaScript文件與目錄操作技巧匯總》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)

希望本文所述對大家JavaScript程序設計有所幫助。

相關(guān)文章

  • JS右下角廣告窗口代碼(可收縮、展開及關(guān)閉)

    JS右下角廣告窗口代碼(可收縮、展開及關(guān)閉)

    這篇文章主要介紹了JS右下角廣告窗口代碼,具有浮動顯示、可收縮、展開及關(guān)閉等功能,涉及javascript針對頁面元素屬性操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • ES6 迭代器 Iterator使用總結(jié)

    ES6 迭代器 Iterator使用總結(jié)

    ES6引入了Iterator(迭代器)接口,用于順序訪問可迭代對象,Iterator接口提供統(tǒng)一的訪問接口,并通過for...of循環(huán)供消費,本文給大家介紹ES6 迭代器 Iterator使用總結(jié),感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • JavaScript中this詳解

    JavaScript中this詳解

    都說 JavaScript 是一種很靈活的語言,這其實也可以說它是一個混亂的語言。它把函數(shù)式編程和面向?qū)ο缶幊挑酆弦黄?,再加上動態(tài)語言特性,簡直強大無比,下面小編給大家介紹Javascript中this詳解,需要的小伙伴可以來參考下
    2015-09-09
  • 微信小程序?qū)崿F(xiàn)撥打電話功能的示例代碼

    微信小程序?qū)崿F(xiàn)撥打電話功能的示例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)撥打電話功能的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • json數(shù)據(jù)格式常見操作示例

    json數(shù)據(jù)格式常見操作示例

    這篇文章主要介紹了json數(shù)據(jù)格式常見操作,結(jié)合實例形式json對象、json數(shù)組表示方式及遍歷技巧,需要的朋友可以參考下
    2019-06-06
  • 關(guān)于JS判斷圖片是否加載完成且獲取圖片寬度的方法

    關(guān)于JS判斷圖片是否加載完成且獲取圖片寬度的方法

    本篇文章小編為大家介紹,關(guān)于JS判斷圖片是否加載完成且獲取圖片寬度的方法,有需要的朋友可以參考一下
    2013-04-04
  • js實現(xiàn)使用輸入input和改變change事件模擬手動輸入

    js實現(xiàn)使用輸入input和改變change事件模擬手動輸入

    聚焦于JavaScript中的輸入模擬技術(shù),本指南將帶你探索如何使用input和change事件來創(chuàng)造逼真的手動輸入效果,通過簡單的代碼實現(xiàn),你將掌握這一實用的技巧,為你的Web應用增添交互的樂趣,需要的朋友可以參考下
    2024-03-03
  • js判斷移動端是否安裝某款app的多種方法

    js判斷移動端是否安裝某款app的多種方法

    這篇文章主要介紹了js判斷移動端是否安裝某款app的多種方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Javascript下的keyCode鍵碼值表

    Javascript下的keyCode鍵碼值表

    Javascript下的keyCode鍵碼值表...
    2007-04-04
  • 詳解JS如何解決大數(shù)據(jù)下滾動頁面卡頓問題

    詳解JS如何解決大數(shù)據(jù)下滾動頁面卡頓問題

    之前遇到不分頁直接獲取到全部數(shù)據(jù),前端滾動查看數(shù)據(jù),頁面就挺卡頓的,所以這篇文章來和大家聊聊如何解決這一問題,感興趣的小伙伴可以了解下
    2023-07-07

最新評論

边坝县| 高阳县| 遂川县| 鸡东县| 石渠县| 宕昌县| 成安县| 沽源县| 新河县| 彰化县| 耿马| 吉木萨尔县| 策勒县| 永登县| 陵水| 和田市| 潮安县| 武宁县| 余干县| 高青县| 崇文区| 钟山县| 东兴市| 信丰县| 鄂托克旗| 根河市| 博湖县| 什邡市| 天门市| 宝坻区| 凤凰县| 新疆| 栖霞市| 富蕴县| 汤原县| 兰州市| 通榆县| 江口县| 祁门县| 施秉县| 靖江市|