国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js基于FileSaver.js 瀏覽器導出Excel文件的示例

2019-11-19 15:47:49
字體:
來源:轉載
供稿:網友

本文介紹了js基于FileSaver.js 瀏覽器導出Excel文件,分享給大家,也給自己做個筆記

限制一:不同瀏覽器對 blob 對象有不同的限制

具體看看下面這個表格(出自FileSaver.js):

Browser Constructs as Filenames Max Blob Size Dependencies
Firefox 20+ Blob Yes 800 MiB None
Firefox < 20 data: URI No n/a Blob.js
Chrome Blob Yes 500 MiB None
Chrome for Android Blob Yes 500 MiB None
Edge Blob Yes ? None
IE 10+ Blob Yes 600 MiB None
Opera 15+ Blob Yes 500 MiB None
Opera < 15 data: URI No n/a Blob.js
Safari 6.1+* Blob No ? None
Safari < 6 data: URI No n/a Blob.js

限制二:構建完 blob 對象后才會轉換成文件

這一點限制對小文件(幾十kb)可能沒什么影響,但對稍微大一點的文件影響就很大了。試想,用戶要下載一個 100mb 的文件,如果他點擊了下載按鈕之后沒看到下載提示的話,他肯定會繼續按,等他按了幾次之后還沒看到下載提示時,他就會抱怨我們的網站,然后離開了。

然而事實上下載的的確確發生了,只是要等到下載完文件之后才能構建 blob 對象,再轉化成文件。而且,用戶再觸發多幾次下載就會造成一些資源上的浪費。

因此,如果是要下載大文件的話,還是推薦直接創建一個 <a> 標簽拉~
寫 html 也好,寫 JavaScript 動態創建也好,用自己喜歡的方式去創建就好了。

FileSaver.js 

/* FileSaver.js * A saveAs() FileSaver implementation. * 1.3.2 * 2016-06-16 18:25:19 * * License: MIT *  See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md *//*global self *//*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true *//*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */var saveAs = saveAs || (function(view) {  "use strict";  // IE <10 is explicitly unsupported  if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]/./.test(navigator.userAgent)) {    return;  }  var     doc = view.document     // only get URL when necessary in case Blob.js hasn't overridden it yet    , get_URL = function() {      return view.URL || view.webkitURL || view;    }    , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")    , can_use_save_link = "download" in save_link    , click = function(node) {      var event = new MouseEvent("click");      node.dispatchEvent(event);    }    , is_safari = /constructor/i.test(view.HTMLElement) || view.safari    , is_chrome_ios =/CriOS//[/d]+/.test(navigator.userAgent)    , throw_outside = function(ex) {      (view.setImmediate || view.setTimeout)(function() {        throw ex;      }, 0);    }    , force_saveable_type = "application/octet-stream"    // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to    , arbitrary_revoke_timeout = 1000 * 40 // in ms    , revoke = function(file) {      var revoker = function() {        if (typeof file === "string") { // file is an object URL          get_URL().revokeObjectURL(file);        } else { // file is a File          file.remove();        }      };      setTimeout(revoker, arbitrary_revoke_timeout);    }    , dispatch = function(filesaver, event_types, event) {      event_types = [].concat(event_types);      var i = event_types.length;      while (i--) {        var listener = filesaver["on" + event_types[i]];        if (typeof listener === "function") {          try {            listener.call(filesaver, event || filesaver);          } catch (ex) {            throw_outside(ex);          }        }      }    }    , auto_bom = function(blob) {      // prepend BOM for UTF-8 XML and text/* types (including HTML)      // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF      if (/^/s*(?:text///S*|application//xml|/S*///S*/+xml)/s*;.*charset/s*=/s*utf-8/i.test(blob.type)) {        return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});      }      return blob;    }    , FileSaver = function(blob, name, no_auto_bom) {      if (!no_auto_bom) {        blob = auto_bom(blob);      }      // First try a.download, then web filesystem, then object URLs      var         filesaver = this        , type = blob.type        , force = type === force_saveable_type        , object_url        , dispatch_all = function() {          dispatch(filesaver, "writestart progress write writeend".split(" "));        }        // on any filesys errors revert to saving with object URLs        , fs_error = function() {          if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {            // Safari doesn't allow downloading of blob urls            var reader = new FileReader();            reader.onloadend = function() {              var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');              var popup = view.open(url, '_blank');              if(!popup) view.location.href = url;              url=undefined; // release reference before dispatching              filesaver.readyState = filesaver.DONE;              dispatch_all();            };            reader.readAsDataURL(blob);            filesaver.readyState = filesaver.INIT;            return;          }          // don't create more object URLs than needed          if (!object_url) {            object_url = get_URL().createObjectURL(blob);          }          if (force) {            view.location.href = object_url;          } else {            var opened = view.open(object_url, "_blank");            if (!opened) {              // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html              view.location.href = object_url;            }          }          filesaver.readyState = filesaver.DONE;          dispatch_all();          revoke(object_url);        }      ;      filesaver.readyState = filesaver.INIT;      if (can_use_save_link) {        object_url = get_URL().createObjectURL(blob);        setTimeout(function() {          save_link.href = object_url;          save_link.download = name;          click(save_link);          dispatch_all();          revoke(object_url);          filesaver.readyState = filesaver.DONE;        });        return;      }      fs_error();    }    , FS_proto = FileSaver.prototype    , saveAs = function(blob, name, no_auto_bom) {      return new FileSaver(blob, name || blob.name || "download", no_auto_bom);    }  ;  // IE 10+ (native saveAs)  if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {    return function(blob, name, no_auto_bom) {      name = name || blob.name || "download";      if (!no_auto_bom) {        blob = auto_bom(blob);      }      return navigator.msSaveOrOpenBlob(blob, name);    };  }  FS_proto.abort = function(){};  FS_proto.readyState = FS_proto.INIT = 0;  FS_proto.WRITING = 1;  FS_proto.DONE = 2;  FS_proto.error =  FS_proto.onwritestart =  FS_proto.onprogress =  FS_proto.onwrite =  FS_proto.onabort =  FS_proto.onerror =  FS_proto.onwriteend =    null;  return saveAs;}(    typeof self !== "undefined" && self  || typeof window !== "undefined" && window  || this.content));// `self` is undefined in Firefox for Android content script context// while `this` is nsIContentFrameMessageManager// with an attribute `content` that corresponds to the windowif (typeof module !== "undefined" && module.exports) { module.exports.saveAs = saveAs;} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) { define("FileSaver.js", function() {  return saveAs; });}

調用方法

 function expToExcel(){      var content = $("#report").html();      var blob = new Blob(["Hello, world!"], { type: "text/plain;charset=utf-8" });      saveAs(blob, "hello world.txt");          }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南江县| 陇南市| 洪湖市| 靖江市| 奉节县| 富民县| 威远县| 杭锦旗| 琼海市| 陕西省| 邯郸市| 天津市| 拉孜县| 五河县| 安国市| 西乌珠穆沁旗| 合江县| 西昌市| 镇原县| 子长县| 桐城市| 甘德县| 甘孜县| 穆棱市| 永福县| 海门市| 安宁市| 兰州市| 巴林右旗| 弥勒县| 昌黎县| 榆树市| 清水河县| 申扎县| 开平市| 彭泽县| 合作市| 红河县| 广宗县| 滁州市| 乌鲁木齐市|