@@ -30,6 +30,7 @@ var saveAs = saveAs || (function(view) {
3030 var event = new MouseEvent ( "click" ) ;
3131 node . dispatchEvent ( event ) ;
3232 }
33+ , is_safari = / V e r s i o n \/ [ \d \. ] + .* S a f a r i / . 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 }
0 commit comments