@Kusmich

Как пере кодировать в base64 и запихнуть в локал-сторендж элементы созданные динамически?

Недавно был вопрос о том как запихнуть картинки в local storage а потом оттуда, достать их и вывести в DOM. Я взял код, доработал и все работало.

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

Вот код картинок, который их создает динамически :

console.log(masive_picture)
var idint = 0;
var masive_picture = [
  "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Proton-K-Zarya.jpg/800px-Proton-K-Zarya.jpg",
  "https://upload.wikimedia.org/wikipedia/ru/3/31/Winniethepooh.jpg"
];
var box = $("body");
for (var i = 0; i < masive_picture.length; i++) {
  idint++;
  console.log(idint)
  box.append('<img class="tableBanner1" src="' + masive_picture[i] + '">')
    // $(".tableBanner").attr("id", idint);	
}
box.append('<img class="tableBanner" id="tableBanner0"   src="">')
box.append('<img class="tableBanner" id="tableBanner1"   src="">')
})

Вот код который записывает и достёт из хранилища :
$(document).ready(function() {
  function getBase64Image(img) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    var dataURL = canvas.toDataURL("image/png");

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
  }

  var els = document.getElementsByClassName("tableBanner1");
  var imgCnt = 0;

  Array.prototype.forEach.call(els, function(bannerImage) {
    // Do stuff with the element
    console.log(bannerImage);
    if (bannerImage.width > 0) {
      imgData = getBase64Image(bannerImage);
      localStorage.setItem("imgData" + imgCnt, imgData);

      var dataImage = localStorage.getItem('imgData' + imgCnt);
      bannerImg = document.getElementById('tableBanner' + imgCnt);
      bannerImg.src = "data:image/png;base64," + dataImage;
      imgCnt++;
    }

  });

});


Подскажыте что делаю не так ? И как надо ?

Вот фидл где весь код : https://jsfiddle.net/85q5vq4k/3/
  • Вопрос задан
  • 265 просмотров
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Вот запускаю я ваш код, и первое что я вижу в консоли хрома -
Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.


С первой попытки гугления выясняется, что canvas.toDataURL не хочет работать с картинками, подтянутыми с другого домена.
Нужно или выкладывать картинки у себя или использовать CORS.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы