背景
我目前有一个测试网页,我需要在Windows和Mac OS环境中工作。目前我有一块代码块可以在IE上运行,但是在Mac上测试它不起作用。
问题
此代码用于动态地动态创建以下div,然后使用我从调用到服务获得的base64结果填充img标记。问题是它永远不会在safari中显示,但它会在IE上显示。
代码
$("#listView").kendoPanelBar({
expandMode: "single",
select: function (e) {
var retrievedContent = dataSource._data;
for (var x = 0; x < retrievedContent.length; x++) {
if (e.item.dataset.uid === retrievedContent[x].uid) {
selectedContent = retrievedContent[x];
$.when(GetImgB64(selectedContent.ServerRelativeUrl)).done(function (imageB64) {
if (imageB64) {
var formattedB64 = "data:image/jpeg;base64," + imageB64;
$(".destroyWaiting").remove();
$(e.item, ".topTabPanel").append('<div class="destroy"> Content : <button type="button" class="insertButton k-primary" id="button1" style="border: 2px none; border-radius: 25px; margin-left: 15px; margin-top: 5px;">Insert</button></div>');
$(e.item).append('<div class="destroy" style="margin-top: 5px; border: 1px solid darkgray;"><p></p><img class="img-responsive" src="' + formattedB64 + '" /></div>');
$(".insertButton").each(function (e) {
$(this).click(function (d) {
insertImages(imageB64);
});
});
}
else {
FeedBackMessage("No Result For Criteria");
}
});
}
}
else {
$(e.item).find(".destroy").remove();
}
},
collapse: function (e) {
$(e.item).find(".destroy").remove();
}
});
答案 0 :(得分:3)
Safari需要一个base64字符串,其字符数可被4整除。
使用此:
if (imageB64) {
while (imageB64.length % 4 > 0) {
imageB64 += '=';
}
var formattedB64 = "data:image/jpeg;base64," + imageB64;
$(".destroyWaiting").remove();
$(e.item, ".topTabPanel").append('<div class="destroy"> Content : <button type="button" class="insertButton k-primary" id="button1" style="border: 2px none; border-radius: 25px; margin-left: 15px; margin-top: 5px;">Insert</button></div>');
$(e.item).append('<div class="destroy" style="margin-top: 5px; border: 1px solid darkgray;"><p></p><img class="img-responsive" src="' + formattedB64 + '" /></div>');
$(".insertButton").each(function (e) {
$(this).click(function (d) {
insertImages(imageB64);
});
});
}
答案 1 :(得分:1)
我的解决方案不同。从REST服务作为base64字符串返回的图像在除Safari桌面或移动设备之外的任何地方都可以使用。
经过一天的研究和实验,我发现IMG SRC属性必须应用前缀“data:image / jpeg; base64”,如下所示:
when()
就是这样的事情失败了:
document.getElementById("targetImg").src = "data:image/jpeg;base64," + defaultAvatarBase64String;
结果是REST服务应用了“data:image / jpeg; base64”前缀。必须修改REST服务以仅返回base64图像字符串。
希望这会有所帮助......