diff --git a/dist/FileSaver.js b/dist/FileSaver.js index b166c93..96e8d5d 100644 --- a/dist/FileSaver.js +++ b/dist/FileSaver.js @@ -78,7 +78,7 @@ } var saveAs = _global.saveAs || // probably in some web worker - typeof window !== 'undefined' && window !== _global ? function saveAs() {} + typeof window !== 'object' || window !== _global ? function saveAs() {} /* noop */ // Use download attribute first if possible (#193 Lumia mobile) : 'download' in HTMLAnchorElement.prototype ? function saveAs(blob, name, autoBom) { diff --git a/dist/FileSaver.min.js b/dist/FileSaver.min.js index 77280a3..4cea842 100644 --- a/dist/FileSaver.min.js +++ b/dist/FileSaver.min.js @@ -1,3 +1,3 @@ -(function(a,b){if("function"==typeof define&&define.amd)define(["exports"],b);else if("undefined"!=typeof exports)b(exports);else{var c={exports:{}};b(c.exports),a.FileSaver=c.exports}})(this,function(a){"use strict";function b(a,b){return b?/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a:a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){f(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;return b.open("HEAD",a,!1),b.send(),200<=b.status&&299>=b.status}Object.defineProperty(a,"__esModule",{value:!0}),a.default=void 0;var e=function(){try{return Function("return this")()||(42,eval)("this")}catch(a){return"object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:this}}(),f=e.saveAs||"undefined"!=typeof window&&window!==e?function(){}:"download"in HTMLAnchorElement.prototype?function(b,f,g){var h=e.URL||e.webkitURL,i=document.createElement("a");f=f||b.name||"download",i.download=f,i.rel="noopener","string"==typeof b?(i.href=b,i.origin===location.origin?i.click():d(i.href)?c(b,f,g):i.click(i.target="_blank")):(i.href=h.createObjectURL(b),setTimeout(function(){h.revokeObjectURL(i.href)},4E4),setTimeout(i.click.bind(i),0))}:"msSaveOrOpenBlob"in navigator?function(e,f,g){if(f=f||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(b(e,g),f);else if(d(e))c(e,f,g);else{var h=document.createElement("a");h.href=e,h.target="_blank",setTimeout(h.click.bind(h))}}:function(a,b,d,f){if(f=f||open("","_blank"),f&&(f.document.title=f.document.body.innerText="downloading..."),"string"==typeof a)return c(a,b,d);var g="application/octet-stream"===a.type,h=/constructor/i.test(e.HTMLElement)||e.safari,i=/CriOS\/[\d]+/.test(navigator.userAgent);if((i||g&&h)&&"object"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),f?f.location.href=a:location=a,f=null},j.readAsDataURL(a)}else{var k=e.URL||e.webkitURL,l=k.createObjectURL(a);f?f.location=l:location.href=l,f=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}};e.saveAs=f;a.default=f}); +(function(a,b){if("function"==typeof define&&define.amd)define(["exports"],b);else if("undefined"!=typeof exports)b(exports);else{var c={exports:{}};b(c.exports),a.FileSaver=c.exports}})(this,function(a){"use strict";function b(a,b){return b?/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a:a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){f(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;return b.open("HEAD",a,!1),b.send(),200<=b.status&&299>=b.status}Object.defineProperty(a,"__esModule",{value:!0}),a.default=void 0;var e=function(){try{return Function("return this")()||(42,eval)("this")}catch(a){return"object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:this}}(),f=e.saveAs||"object"!=typeof window||window!==e?function(){}:"download"in HTMLAnchorElement.prototype?function(b,f,g){var h=e.URL||e.webkitURL,i=document.createElement("a");f=f||b.name||"download",i.download=f,i.rel="noopener","string"==typeof b?(i.href=b,i.origin===location.origin?i.click():d(i.href)?c(b,f,g):i.click(i.target="_blank")):(i.href=h.createObjectURL(b),setTimeout(function(){h.revokeObjectURL(i.href)},4E4),setTimeout(i.click.bind(i),0))}:"msSaveOrOpenBlob"in navigator?function(e,f,g){if(f=f||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(b(e,g),f);else if(d(e))c(e,f,g);else{var h=document.createElement("a");h.href=e,h.target="_blank",setTimeout(h.click.bind(h))}}:function(a,b,d,f){if(f=f||open("","_blank"),f&&(f.document.title=f.document.body.innerText="downloading..."),"string"==typeof a)return c(a,b,d);var g="application/octet-stream"===a.type,h=/constructor/i.test(e.HTMLElement)||e.safari,i=/CriOS\/[\d]+/.test(navigator.userAgent);if((i||g&&h)&&"object"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),f?f.location.href=a:location=a,f=null},j.readAsDataURL(a)}else{var k=e.URL||e.webkitURL,l=k.createObjectURL(a);f?f.location=l:location.href=l,f=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}};e.saveAs=f;a.default=f}); //# sourceMappingURL=FileSaver.min.js.map \ No newline at end of file diff --git a/dist/FileSaver.min.js.map b/dist/FileSaver.min.js.map index 559ec28..c082b31 100644 --- a/dist/FileSaver.min.js.map +++ b/dist/FileSaver.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/FileSaver.js"],"names":[],"mappings":"yNA0BA,QAAS,CAAA,CAAT,CAAc,CAAd,CAAoB,CAApB,CAA6B,OACtB,CAAA,CADsB,CAIvB,6EAA6E,IAA7E,CAAkF,CAAI,CAAC,IAAvF,CAJuB,CAKlB,GAAI,CAAA,IAAJ,CAAS,UAA8B,CAA9B,CAAT,CAA8C,CAAE,IAAI,CAAE,CAAI,CAAC,IAAb,CAA9C,CALkB,CAOpB,CAPoB,CACN,CAOtB,CAED,QAAS,CAAA,CAAT,CAAmB,CAAnB,CAAwB,CAAxB,CAA8B,CAA9B,CAAuC,CACrC,GAAI,CAAA,CAAG,CAAG,GAAI,CAAA,cAAd,CACA,CAAG,CAAC,IAAJ,CAAS,KAAT,CAAgB,CAAhB,CAFqC,CAGrC,CAAG,CAAC,YAAJ,CAAmB,MAHkB,CAIrC,CAAG,CAAC,MAAJ,CAAa,UAAY,CACvB,CAAM,CAAC,CAAG,CAAC,QAAL,CAAe,CAAf,CAAqB,CAArB,CACP,CANoC,CAOrC,CAAG,CAAC,OAAJ,CAAc,UAAY,CACxB,OAAO,CAAC,KAAR,CAAc,yBAAd,CACD,CAToC,CAUrC,CAAG,CAAC,IAAJ,EACD,CAED,QAAS,CAAA,CAAT,CAAsB,CAAtB,CAA2B,CACzB,GAAI,CAAA,CAAG,CAAG,GAAI,CAAA,cAAd,CAIA,MAFA,CAAA,CAAG,CAAC,IAAJ,CAAS,MAAT,CAAiB,CAAjB,IAEA,CADA,CAAG,CAAC,IAAJ,EACA,CAAqB,GAAd,EAAA,CAAG,CAAC,MAAJ,EAAmC,GAAd,EAAA,CAAG,CAAC,MACjC,C,qEA1CG,CAAA,CAAO,CAAI,UAAY,CAEzB,GAAI,CACF,MAAO,CAAA,QAAQ,CAAC,aAAD,CAAR,IAA6B,CAAC,GAAI,IAAL,EAAW,MAAX,CACrC,CAAC,MAAO,CAAP,CAAU,CAGV,MAAyB,QAAlB,QAAO,CAAA,MAAP,EAA8B,MAAM,CAAC,MAAP,GAAkB,MAAhD,CAAyD,MAAzD,CACW,QAAhB,QAAO,CAAA,IAAP,EAA4B,IAAI,CAAC,IAAL,GAAc,IAA1C,CAAiD,IAAjD,CACkB,QAAlB,QAAO,CAAA,MAAP,EAA8B,MAAM,CAAC,MAAP,GAAkB,MAAhD,CAAyD,MAAzD,CAAkE,IACrE,CACF,CAXa,E,CA4CV,CAAM,CAAG,CAAO,CAAC,MAAR,EAEM,WAAlB,QAAO,CAAA,MAAP,EAAiC,MAAM,GAAK,CAFhC,CAGT,UAAmB,CAAc,CAHxB,CAMX,YAAc,CAAA,iBAAiB,CAAC,SAAhC,CACA,SAAiB,CAAjB,CAAuB,CAAvB,CAA6B,CAA7B,CAAsC,IAClC,CAAA,CAAG,CAAG,CAAO,CAAC,GAAR,EAAe,CAAO,CAAC,SADK,CAElC,CAAC,CAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAF8B,CAGtC,CAAI,CAAG,CAAI,EAAI,CAAI,CAAC,IAAb,EAAqB,UAHU,CAKtC,CAAC,CAAC,QAAF,CAAa,CALyB,CAMtC,CAAC,CAAC,GAAF,CAAQ,UAN8B,CAWlB,QAAhB,QAAO,CAAA,CAX2B,EAapC,CAAC,CAAC,IAAF,CAAS,CAb2B,CAchC,CAAC,CAAC,MAAF,GAAa,QAAQ,CAAC,MAdU,CAmBlC,CAAC,CAAC,KAAF,EAnBkC,CAelC,CAAW,CAAC,CAAC,CAAC,IAAH,CAAX,CACI,CAAQ,CAAC,CAAD,CAAO,CAAP,CAAa,CAAb,CADZ,CAEI,CAAC,CAAC,KAAF,CAAQ,CAAC,CAAC,MAAF,CAAW,QAAnB,CAjB8B,GAuBpC,CAAC,CAAC,IAAF,CAAS,CAAG,CAAC,eAAJ,CAAoB,CAApB,CAvB2B,CAwBpC,UAAU,CAAC,UAAY,CAAE,CAAG,CAAC,eAAJ,CAAoB,CAAC,CAAC,IAAtB,CAA6B,CAA5C,CAA8C,GAA9C,CAxB0B,CAyBpC,UAAU,CAAC,CAAC,CAAC,KAAF,CAAQ,IAAR,CAAa,CAAb,CAAD,CAAkB,CAAlB,CAzB0B,CA2BvC,CA5BC,CA+BA,oBAAsB,CAAA,SAAtB,CACA,SAAiB,CAAjB,CAAuB,CAAvB,CAA6B,CAA7B,CAAsC,CAGtC,GAFA,CAAI,CAAG,CAAI,EAAI,CAAI,CAAC,IAAb,EAAqB,UAE5B,CAAoB,QAAhB,QAAO,CAAA,CAAX,CAUE,SAAS,CAAC,gBAAV,CAA2B,CAAG,CAAC,CAAD,CAAO,CAAP,CAA9B,CAA+C,CAA/C,CAVF,KACE,IAAI,CAAW,CAAC,CAAD,CAAf,CACE,CAAQ,CAAC,CAAD,CAAO,CAAP,CAAa,CAAb,CADV,KAEO,CACL,GAAI,CAAA,CAAC,CAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAR,CACA,CAAC,CAAC,IAAF,CAAS,CAFJ,CAGL,CAAC,CAAC,MAAF,CAAW,QAHN,CAIL,UAAU,CAAC,CAAC,CAAC,KAAF,CAAQ,IAAR,CAAa,CAAb,CAAD,CACX,CAIJ,CAhBC,CAmBA,SAAiB,CAAjB,CAAuB,CAAvB,CAA6B,CAA7B,CAAsC,CAAtC,CAA6C,CAS7C,GANA,CAAK,CAAG,CAAK,EAAI,IAAI,CAAC,EAAD,CAAK,QAAL,CAMrB,CALI,CAKJ,GAJE,CAAK,CAAC,QAAN,CAAe,KAAf,CACA,CAAK,CAAC,QAAN,CAAe,IAAf,CAAoB,SAApB,CAAgC,gBAGlC,EAAoB,QAAhB,QAAO,CAAA,CAAX,CAA8B,MAAO,CAAA,CAAQ,CAAC,CAAD,CAAO,CAAP,CAAa,CAAb,CAAf,CATe,GAWzC,CAAA,CAAK,CAAiB,0BAAd,GAAA,CAAI,CAAC,IAX4B,CAYzC,CAAQ,CAAG,eAAe,IAAf,CAAoB,CAAO,CAAC,WAA5B,GAA4C,CAAO,CAAC,MAZtB,CAazC,CAAW,CAAG,eAAe,IAAf,CAAoB,SAAS,CAAC,SAA9B,CAb2B,CAe7C,GAAI,CAAC,CAAW,EAAK,CAAK,EAAI,CAA1B,GAA8D,QAAtB,QAAO,CAAA,UAAnD,CAA4E,CAE1E,GAAI,CAAA,CAAM,CAAG,GAAI,CAAA,UAAjB,CACA,CAAM,CAAC,SAAP,CAAmB,UAAY,CAC7B,GAAI,CAAA,CAAG,CAAG,CAAM,CAAC,MAAjB,CACA,CAAG,CAAG,CAAW,CAAG,CAAH,CAAS,CAAG,CAAC,OAAJ,CAAY,cAAZ,CAA4B,uBAA5B,CAFG,CAGzB,CAHyB,CAGlB,CAAK,CAAC,QAAN,CAAe,IAAf,CAAsB,CAHJ,CAIxB,QAAQ,CAAG,CAJa,CAK7B,CAAK,CAAG,IACT,CATyE,CAU1E,CAAM,CAAC,aAAP,CAAqB,CAArB,CACD,CAXD,IAWO,IACD,CAAA,CAAG,CAAG,CAAO,CAAC,GAAR,EAAe,CAAO,CAAC,SAD5B,CAED,CAAG,CAAG,CAAG,CAAC,eAAJ,CAAoB,CAApB,CAFL,CAGD,CAHC,CAGM,CAAK,CAAC,QAAN,CAAiB,CAHvB,CAIA,QAAQ,CAAC,IAAT,CAAgB,CAJhB,CAKL,CAAK,CAAG,IALH,CAML,UAAU,CAAC,UAAY,CAAE,CAAG,CAAC,eAAJ,CAAoB,CAApB,CAA0B,CAAzC,CAA2C,GAA3C,CACX,CACF,C,CAED,CAAO,CAAC,MAAR,CAAiB,C,WAEF,C","file":"FileSaver.min.js","sourcesContent":["/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n\n// The one and only way of getting global scope in all enviorment\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = (function () {\n// some use content security policy to disable eval\n try {\n return Function('return this')() || (42, eval)('this')\n } catch (e) {\n // every global should have circular reference\n // used for checking if someone writes var window = {}; var self = {}\n return typeof window === 'object' && window.window === window ? window\n : typeof self === 'object' && self.self === self ? self\n : typeof global === 'object' && global.global === global ? global : this\n }\n})()\n\nfunction bom (blob, autoBom) {\n if (!autoBom) return blob\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, autoBom) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, autoBom)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n xhr.send()\n return xhr.status >= 200 && xhr.status <= 299\n}\n\nvar saveAs = _global.saveAs ||\n// probably in some web worker\n(typeof window !== 'undefined' && window !== _global)\n ? function saveAs () { /* noop */ }\n\n// Use download attribute first if possible (#193 Lumia mobile)\n: 'download' in HTMLAnchorElement.prototype\n? function saveAs (blob, name, autoBom) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, autoBom)\n : a.click(a.target = '_blank')\n } else {\n a.click()\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(a.click.bind(a), 0)\n }\n}\n\n// Use msSaveOrOpenBlob as a second approch\n: 'msSaveOrOpenBlob' in navigator\n? function saveAs (blob, name, autoBom) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, autoBom)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(a.click.bind(a))\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, autoBom), name)\n }\n}\n\n// Fallback to using FileReader and a popup\n: function saveAs (blob, name, autoBom, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only avalible on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, autoBom)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari)) && typeof FileReader === 'object') {\n // Safari doesn't allow downloading of blob urls\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n}\n\n_global.saveAs = saveAs\n\nexport default saveAs\n"]} \ No newline at end of file +{"version":3,"sources":["../src/FileSaver.js"],"names":[],"mappings":"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","file":"FileSaver.min.js","sourcesContent":["/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n\n// The one and only way of getting global scope in all enviorment\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = (function () {\n// some use content security policy to disable eval\n try {\n return Function('return this')() || (42, eval)('this')\n } catch (e) {\n // every global should have circular reference\n // used for checking if someone writes var window = {}; var self = {}\n return typeof window === 'object' && window.window === window ? window\n : typeof self === 'object' && self.self === self ? self\n : typeof global === 'object' && global.global === global ? global : this\n }\n})()\n\nfunction bom (blob, autoBom) {\n if (!autoBom) return blob\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, autoBom) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, autoBom)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n xhr.send()\n return xhr.status >= 200 && xhr.status <= 299\n}\n\nvar saveAs = _global.saveAs ||\n// probably in some web worker\n(typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n// Use download attribute first if possible (#193 Lumia mobile)\n: 'download' in HTMLAnchorElement.prototype\n? function saveAs (blob, name, autoBom) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, autoBom)\n : a.click(a.target = '_blank')\n } else {\n a.click()\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(a.click.bind(a), 0)\n }\n}\n\n// Use msSaveOrOpenBlob as a second approch\n: 'msSaveOrOpenBlob' in navigator\n? function saveAs (blob, name, autoBom) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, autoBom)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(a.click.bind(a))\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, autoBom), name)\n }\n}\n\n// Fallback to using FileReader and a popup\n: function saveAs (blob, name, autoBom, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only avalible on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, autoBom)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari)) && typeof FileReader === 'object') {\n // Safari doesn't allow downloading of blob urls\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n}\n\n_global.saveAs = saveAs\n\nexport default saveAs\n"]} \ No newline at end of file diff --git a/src/FileSaver.js b/src/FileSaver.js index 3e7dcbd..e5c9676 100644 --- a/src/FileSaver.js +++ b/src/FileSaver.js @@ -57,7 +57,7 @@ function corsEnabled (url) { var saveAs = _global.saveAs || // probably in some web worker -(typeof window !== 'undefined' && window !== _global) +(typeof window !== 'object' || window !== _global) ? function saveAs () { /* noop */ } // Use download attribute first if possible (#193 Lumia mobile)