JQuery загрузка изображений не работает в Safari - PullRequest
0 голосов
/ 11 июня 2018

Следующий код используется для установки атрибутов img, а затем что-то делать при загрузке img.

Это прекрасно работает в Chrome и FireFox, однако строка let img..etc никогда не срабатывает в Safari.,Почему это?

$("<img/>").attr("src", "data:image/*; base64," + base64).on("load", (e) => {
        let img = e.currentTarget;
        context.scale(width / img.width,  height / img.height);
        context.drawImage(img, 0, 0);
        deferred.resolve($("<img/>").attr("src", canvas.toDataURL()));
    });

Я пробовал использовать техническую предварительную версию сафари, но безрезультатно.Это происходит на Mac и iPhone.

Редактировать:

Согласно Обработка событий загрузки изображений между браузерами

Я пытался, но безрезультатно:

var image = $('<img/>');
image.on('load', e => {
    let img = e.currentTarget;
    context.scale(width / img.width,  height / img.height);
    context.drawImage(img, 0, 0);
    deferred.resolve($('<img/>').attr('src', canvas.toDataURL()));
});
image.attr('src', 'data:image/*; base64,' + base64);

Я также пробовал с простым JavaScript

var image = $('<img/>');
image.onload = function(e) {
    let img = e.currentTarget;
    context.scale(width / img.width,  height / img.height);
    context.drawImage(img, 0, 0);
    deferred.resolve($('<img/>').attr('src', canvas.toDataURL()));
};
image.src = "data:image/*; base64," + base64;

1 Ответ

0 голосов
/ 11 июня 2018

Заголовки URL ваших данных имеют неправильный формат:

Разделитель для параметров должен быть ; без пробела.

Chrome и Firefox хороши здесь, чтобы разрешить это.

"data:image/*;base64," + base64 должно работать.

var base64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=='

var willWork = new Image();
willWork.onerror = willWork.onload = e => console.log('without space', e.type);
willWork.src = "data:image/*;base64," + base64;

var willFail = new Image();
willFail.onerror = willFail.onload = e => console.log('with space', e.type);
willFail.src = "data:image/*; base64," + base64;

Но учтите, что даже если я не имею представления о поддержке браузером для этого, вам будет еще безопаснее установить правильный MIME вместо подстановочного знака image/*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...