Javascript, программно запускает загрузку файла в firefox

У меня есть uri данных в памяти, который я хотел бы, чтобы пользователь загрузил.

эта скрипка работает в chrome, но не FF:http://jsfiddle.net/6W2TY/

когда вы нажмете run, он загрузит крошечное изображение в chrome и ничего не сделает в FF. Может ли кто-нибудь помочь мне понять, почему он не работает в FF и что мне нужно сделать, чтобы он работал?

спасибо!

2 ответов


вы используете новый (html5)скачать атрибут. насколько я знаю, это поддерживается только в Chrome, а не (пока) в Firefox.

обновление 3-2018
Эта функция теперь поддерживается в почти все основные браузеры (нет поддержки IE).

альтернатива: использование местоположения.хреф!--17-->

другой способ принудительной загрузки-перенаправить пользователя на изображение следующим образом:

// generate the image
var img = ""

// then call a function maybe onClick or something
downloadImage(img);

function downloadImage(data) {
    location.href = "data:application/octet-stream;base64," + data;
}

или короткая версия

location.href = "data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABWSURBVDhPY0xISPh//0UOA7mAiVyNMH2jBjAwkBQGjD9KGBTEJ6OEO0kG2NvbMwCjnXwDsEU5SS5ANuDhjRCGJbPFSQsDdBfIyMhQZgDIQLK9QLWkDABPsQw5I+5qmAAAAABJRU5ErkJggg=="

Альтернатива: Серверная Сторона

в качестве альтернативы, если вы обрабатываете сервер изображений, вы можете принудительно загрузить, установив заголовок Content-disposition.

пример на PHP

header('Content-Disposition: attachment; filename="image.png"');

Я понимаю, что это старый пост, но я наткнулся на него, когда у меня была аналогичная проблема с загрузкой файлов в FF. Возможно, это не сработало в FF в то время, когда был написан вопрос, но теперь это так.

a = document.createElement('a');
document.body.appendChild(a);
a.download = name;
a.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABWSURBVDhPY0xISPh//0UOA7mAiVyNMH2jBjAwkBQGjD9KGBTEJ6OEO0kG2NvbMwCjnXwDsEU5SS5ANuDhjRCGJbPFSQsDdBfIyMhQZgDIQLK9QLWkDABPsQw5I+5qmAAAAABJRU5ErkJggg==";
a.click();

изменения от оригинальной скрипки:

  1. добавить вызов document.body.appendChild(a);
  2. изменить triggerEvent() to a.click()

вот обновленная скрипка: http://jsfiddle.net/70f91ao7/6/