gpt4 book ai didi

javascript - XHR + 数据 URI 在 Safari 中不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 04:21:48 24 4
gpt4 key购买 nike

我使用 XMLHttpRequest 使用以下代码从数据 URI 生成 Blob:

function dataUrlToBlob(dataUrl, callback) {
var xhr = new XMLHttpRequest;
xhr.open( 'GET', dataUrl);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
callback( new Blob( [this.response], {type: 'image/png'} ) );
};
xhr.send();
}

用法:

dataUrlToBlob('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=', callback);

除 Safari 外,在所有浏览器中一切正常。它抛出这样的错误:

[Error] XMLHttpRequest cannot load data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=. Cross origin requests are only supported for HTTP.

问题是,有什么方法可以让这种方法在 Safari 中发挥作用吗?

最佳答案

为什么要使用 XHR 来做到这一点?只需同步执行即可(答案取自 here ):

function dataURItoBlob(dataURI) {
if(typeof dataURI !== 'string'){
throw new Error('Invalid argument: dataURI must be a string');
}
dataURI = dataURI.split(',');
var type = dataURI[0].split(':')[1].split(';')[0],
byteString = atob(dataURI[1]),
byteStringLength = byteString.length,
arrayBuffer = new ArrayBuffer(byteStringLength),
intArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteStringLength; i++) {
intArray[i] = byteString.charCodeAt(i);
}
return new Blob([intArray], {
type: type
});
}

关于javascript - XHR + 数据 URI 在 Safari 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30920059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com