Принудительная загрузка URL-адреса " data:text/plain
мне было интересно, можно ли заставить браузер (по крайней мере хром) скачать data:text/plain
URL-адрес.
Chrome загружает двоичные URL-адреса (например,data:application/zip;base64,...
), но он не загружает файлы, которые можно просматривать в браузере (такие как текстовые файлы).
то, что я уже пробовал без успеха до сих пор, это:
data:text/plain;content-disposition=attachment;filename=test.txt;...
но кажется, что я не могу добавлять заголовки, как это.
есть ли способ сделать Chrome скачать data:text/plain,...
URL-адрес?
4 ответов
на данный момент, это стало возможным использовать <a download>
в Chrome. Используя dispatchEvent
, вы можете загрузить любую строку в виде файла (даже с пользовательским именем файла), когда захотите. Вот функция утилиты, чтобы использовать его:
var downloadFile = function(filename, content) {
var blob = new Blob([content]);
var evt = document.createEvent("HTMLEvents");
evt.initEvent("click");
$("<a>", {
download: filename,
href: webkitURL.createObjectURL(blob)
}).get(0).dispatchEvent(evt);
};
использование:
downloadFile("foo.txt", "bar");
Он использует jQuery и webkit
префикс, но обоих можно избежать.
Try this:
<a download="file_downloaded_via_data_URL.txt"
href="data:text/plain;base64,SGVsbG8sIHdvcmxkISBJJ20gZG93bmxvYWRlZCB2aWEgImRhdGE6dGV4dC9wbGFpbjsuLi4iIFVSTCB1c2luZyA8YSBkb3dubG9hZD0iZmlsZV9uYW1lIi4uLj4uDQpNeSBiaXJ0aHBsYWNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0Njg1MTcvDQoNCk1vcmUgYWJvdXQ6DQpodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sL2xpbmtzLmh0bWwjYXR0ci1oeXBlcmxpbmstZG93bmxvYWQNCmh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwvbGlua3MuaHRtbCNkb3dubG9hZGluZy1yZXNvdXJjZXMNCg0KQnJvd3NlciBzdXBwb3J0OiBodHRwOi8vY2FuaXVzZS5jb20vZG93bmxvYWQ=">
Download text file
</a>
он использует атрибут HTML5 download="filename.ext"
. (в JS не нужен:)
подробнее о: http://www.w3.org/TR/html/links.html#downloading-resources
поддержка браузера может быть проверена наhttp://caniuse.com/download
(на данный момент, 2013, нет поддержки IE или Safari)
Я думаю, вы можете сделать резерв для не поддерживающих браузеров: используйте JS для изменения значения href="..."
к URL вашего сценария сервера (который возвратит содержимое файла с соответствующим заголовком HTTP Content-disposition: attachment;filename=filename.txt
).
то, что я сделал, это отправка данных на сервер, который отправляет их обратно со следующим заголовком HTTP:
Content-disposition: attachment;filename=test.txt
мне это не нравится, но работает довольно хорошо.
это работает, как в аду ...
<div class="tags-style-one dragme" draggable="true" data-transfer="33343">some value is 33343</div>
<script type="text/javascript">
(function ($) {
$(document).ready(function () {
$('.dragme').on("dragstart",function(evt) {
evt.originalEvent
.dataTransfer
.setData(
"text/plain",
$(this).data('transfer').toString()
);
});
})(jQuery);
</script>