[英]XHR + data URI doesn't work in Safari
我使用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之外,所有瀏覽器都可以正常運行。 它拋出這樣的錯誤:
[錯誤] XMLHttpRequest無法加載數據:image / png; base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII =。 跨源請求僅支持HTTP。
問題是,有什么方法可以使這種方法在Safari中起作用?
您為什么要使用XHR來做到這一點? 只需同步即可(答案來自此處 ):
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
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.