Я пытался загрузить и декодировать файл изображения (png) на веб-работнике.Я получаю данные изображения, используя XMLHttpRequest как Blob , а затем пытаюсь создать ImageBitmap , используя createImageBitmap .Это прекрасно работает в основном потоке, но дает исключение DomException при запуске того же кода на Web Worker .Я обнаружил, что большой двоичный объект, возвращаемый из запроса xhr, отличается при выполнении в основном потоке и в веб-работнике, в частности, в основном потоке, который я получил
Blob {size: 526050, type: "image/png"}
, в то время как на веб-работнике я получил
Blob {size: 175, type: "text/html"}
Это соответствующий код:
const loadImg = (url) => {
const xhr = new XMLHttpRequest()
xhr.responseType = "blob"
return new Promise((resolve, reject) => {
xhr.onload = () => {
const blob = xhr.response
// This gives Blob {size: 526050, type: "image/png"} on the main thread and
// Blob {size: 175, type: "text/html"} on the web worker
console.log(blob)
createImageBitmap(blob).then((img) => {
return resolve(img)
}).catch(e => {
return reject(e)
})
}
xhr.onerror = (error) => {
return reject(error)
}
xhr.open("get", url, true);
xhr.send();
})
}
const test = async () => {
try {
const img = await loadImg("src/assets/image.png")
console.log(img)
}
catch (e) {
console.error(e)
}
}
test()
Почему я получаю два разных объекта BLOB-объектов при выполнении запроса из основного потока и веб-работника?
Проверено наChrome, Windows