显示图像没有出现在safari中,但在IE11中正常工作

时间:2017-03-21 20:21:25

标签: javascript html macos safari

背景

我目前有一个测试网页,我需要在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">&nbsp;&nbsp;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();
                }
            });

2 个答案:

答案 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">&nbsp;&nbsp;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);
    });
  });
}

来源:Base64 image tag in safari did not showed up

答案 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图像字符串。

希望这会有所帮助......