LINUX.ORG.RU

Javascript и Blob

 , ,


0

2

Здравствуйте, не как не могу разобраться, если создать blob и создать ссылку, и вот потом добавить в этот blob, то содержимое по ссылке не добавляется :(

buffer = [],
blob = new Blob(buffer, {type: "text/plain"});
url = URL.createObjectURL(blob);
a = document.createElement('a');
a.download = "backup.json";
a.href = url;
a.textContent = "Download backup.json";
document.querySelector('body').appendChild(a);
for (var i=0; i<10; i++) {
  buffer.push(i);
  blob = new Blob([blob, buffer], {type: "text/plain"});
  //blob = new Blob(buffer, {type: "text/plain"});
}

Нужно чтоб blob пополнялся после сгенерирования ссылки

★

На второй строчке забыл квадратные скобки у первого параметра. Самая частая ошибка при попытке создать блоб.

Vit ★★★★★
()
Ответ на: комментарий от jessgt

У тебя по коду в ссылку пихается пустой блоб, там нет содержимого. Расставь console.log и посмотри. Дел на пять минут.

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

если цикл оставить после создания ссылки, то тогда да, пустой, а если цикл делать перед созданием ссылки, то тогда не пустой, но я и создала эту тему какраз для того чтоб понять как можно пополнять его после создания ссылки, либо пересоздавать эту ссылку, но чтоб путь был тот же

jessgt ★
() автор топика
Ответ на: комментарий от jessgt
var buffer = [], blob, a;
blob = new Blob(buffer, {type: "text/plain"});
a = document.createElement('a');
a.download = "backup.json";
a.textContent = "Download backup.json";
document.querySelector('body').appendChild(a);
for (var i=0; i<10; i++) {
  buffer.push(i);
  blob = new Blob([blob, buffer], {type: "text/plain"});
  a.href = URL.createObjectURL(blob);
}
anonymous
()
Ответ на: комментарий от jessgt

То, чего ты хочешь - невозможно.

anonymous
()
Ответ на: комментарий от jessgt

Если только грязными методами, перехватывать нажатие на уже соззданную ссылку, отменять нажатие, и триггерить нажатие на другую, созданную из нового блоба. Но это если у тебя все завязано на действия пользователя.

Короче говоря, неясен юзкейс. В том формате, в котором ты ставишь вопрос - нет, нельзя.

anonymous
()
Ответ на: комментарий от jessgt

URL.creteObjectURL не реактивный. Он создает новый иммутабельный объект и всё. Уйти от апдейта href таким макаром не получится.

Не забудь еще URL.revokeObjectURL() дергать вовремя, если он есть, чтобы память не текла.

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.