En primer lugar, una advertencia: application/csv
no es un valid MIME type, por lo que el hecho de que "funcione" para usted en este caso es puramente una peculiaridad de implementación que muy bien podría cambiar en el futuro. (Por ejemplo, Safari muestra application/octet-stream
, que yo esperaría para descargar.)
HTML5 tiene un new <a download="file.name">
attribute. Esto obliga al navegador a descargar el archivo en el disco; usa el valor del atributo como el nombre de archivo predeterminado. Funciona junto con un URI de datos o un URI de blob. (Demo)
Sin embargo, actualmente solo es compatible con Chrome (14+). Safari 5.1 ignora el atributo.
Una posible alternativa es utilizar el Filesystem API, pero que le da una carpeta de espacio aislado para trabajar. No puede — por ejemplo — guardar un archivo directamente en la carpeta Documentos del usuario. En su lugar, se puede escribir un archivo en la caja de arena y luego redirigir a presentar en el nuevo filesystem
esquema:
location.assign('filesystem:http://example.com/temporary/somefile.csv');
Esto se debe invocar mecanismo de descarga de la UA (! Con el nombre correcto), pero no he probado esto , por lo que es posible que Safari solo muestre el archivo de todos modos.
El problema aquí es: parece que safari no es compatible con la API del sistema de archivos ... http: //caniuse.com/#feat=filesystem – user3682091