Skip to content

Commit b83779c

Browse files
committed
Merge pull request eligrey#175 from antelle/safari-octet-stream-fix
Workaround for downloading application/octet-stream in Safari
2 parents bf44e18 + 54c0428 commit b83779c

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

FileSaver.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var saveAs = saveAs || (function(view) {
3030
var event = new MouseEvent("click");
3131
node.dispatchEvent(event);
3232
}
33+
, is_safari = /Version\/[\d\.]+.*Safari/.test(navigator.userAgent)
3334
, webkit_req_fs = view.webkitRequestFileSystem
3435
, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
3536
, throw_outside = function(ex) {
@@ -94,6 +95,19 @@ var saveAs = saveAs || (function(view) {
9495
}
9596
// on any filesys errors revert to saving with object URLs
9697
, fs_error = function() {
98+
if (target_view && is_safari && typeof FileReader !== "undefined") {
99+
// Safari doesn't allow downloading of blob urls
100+
var reader = new FileReader();
101+
reader.onloadend = function() {
102+
var base64Data = reader.result;
103+
target_view.location.href = "data:attachment/file" + base64Data.slice(base64Data.search(/[,;]/));
104+
filesaver.readyState = filesaver.DONE;
105+
dispatch_all();
106+
};
107+
reader.readAsDataURL(blob);
108+
filesaver.readyState = filesaver.INIT;
109+
return;
110+
}
97111
// don't create more object URLs than needed
98112
if (blob_changed || !object_url) {
99113
object_url = get_URL().createObjectURL(blob);
@@ -102,7 +116,7 @@ var saveAs = saveAs || (function(view) {
102116
target_view.location.href = object_url;
103117
} else {
104118
var new_tab = view.open(object_url, "_blank");
105-
if (new_tab == undefined && typeof safari !== "undefined") {
119+
if (new_tab == undefined && is_safari) {
106120
//Apple do not allow window.open, see http://bit.ly/1kZffRI
107121
view.location.href = object_url
108122
}

FileSaver.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Contributing
100100
The `FileSaver.js` distribution file is compiled with Uglify.js like so:
101101

102102
```bash
103-
uglifyjs FileSaver.js --comments /@source/ > FileSaver.min.js
103+
uglifyjs FileSaver.js --mangle --comments /@source/ > FileSaver.min.js
104104
```
105105

106106
Please make sure you build a production version before submitting a pull request.

0 commit comments

Comments
 (0)