如何在新标签中打开新创建的图像?

Joh*_*hen 20 javascript ajax jquery dom

下面的代码在同一页面的底部创建图像.如何将该图像显示到新的选项卡/窗口而不是显示在同一页面中?

success: function (data) {
            var image = new Image();
            image.src = "data:image/jpg;base64," + data.d;
            document.body.appendChild(image);
        }
Run Code Online (Sandbox Code Playgroud)

Sup*_*aca 48

就像是:

success: function (data) {
        var image = new Image();
        image.src = "data:image/jpg;base64," + data.d;

        var w = window.open("");
        w.document.write(image.outerHTML);
    }
Run Code Online (Sandbox Code Playgroud)

  • 我们可以为一个以上的图像做这个吗? (3认同)
  • 不要忘记添加: w.document.close(); 最后,否则页面将继续加载。(在 Chrome 中测试) (3认同)

hrv*_*j3e 12

最新解决方案 - 2019-10 有效。

在新选项卡中打开图像。

let data = 'data:image/png;base64,iVBORw0KGgoAAAANS';
let w = window.open('about:blank');
let image = new Image();
image.src = data;
setTimeout(function(){
  w.document.write(image.outerHTML);
}, 0);
Run Code Online (Sandbox Code Playgroud)

/sf/answers/4103079641/ /sf/answers/3255755331/ /sf/answers/1945876481/


小智 8

当前的建议不会让Chrome烦恼,我总是得到白页,现在我使用

const base64ImageData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
const contentType = 'image/png';

const byteCharacters = atob(base64ImageData.substr(`data:${contentType};base64,`.length));
const byteArrays = [];

for (let offset = 0; offset < byteCharacters.length; offset += 1024) {
    const slice = byteCharacters.slice(offset, offset + 1024);

    const byteNumbers = new Array(slice.length);
    for (let i = 0; i < slice.length; i++) {
        byteNumbers[i] = slice.charCodeAt(i);
    }

    const byteArray = new Uint8Array(byteNumbers);

    byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, {type: contentType});
const blobUrl = URL.createObjectURL(blob);

window.open(blobUrl, '_blank');
Run Code Online (Sandbox Code Playgroud)

感谢杰里米!
/sf/answers/1137203791/