| | |
| | | : function saveAs(blob, name, opts, popup) { |
| | | // Open a popup immediately do go around popup blocker |
| | | // Mostly only available on user interaction and the fileReader is async so... |
| | | popup = popup || open('', '_blank'); |
| | | |
| | | if (popup) { |
| | | popup.document.title = popup.document.body.innerText = 'downloading...'; |
| | | } |
| | | |
| | | popup = popup |
| | | // || open('', '_blank'); |
| | | // if (popup) { |
| | | // popup.document.title = popup.document.body.innerText = 'downloading...'; |
| | | // } |
| | | if (typeof blob === 'string') return download(blob, name, opts); |
| | | var force = blob.type === 'application/octet-stream'; |
| | | |
| | |
| | | reader.onloadend = function () { |
| | | var url = reader.result; |
| | | url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); |
| | | if (popup) popup.location.href = url;else location = url; |
| | | // if (popup) popup.location.href = url;else location = url; |
| | | let triggerDownload = document.createElement("a"); |
| | | triggerDownload.download = name; |
| | | triggerDownload.href = url; |
| | | triggerDownload.click(); |
| | | popup = null; // reverse-tabnabbing #460 |
| | | }; |
| | | |
| | | reader.readAsDataURL(blob); |
| | | |
| | | } else { |
| | | var URL = _global.URL || _global.webkitURL; |
| | | var url = URL.createObjectURL(blob); |