Вот функция, которая возвращает ширину изображения, учитывая его URL:
async function getImageWidthByUrl(imgUrl) {
const imgEl = document.createElement("img");
let untilImgLoaded = new Promise((resolve, reject) => {
imgEl.onload = resolve;
imgEl.onerror = reject;
});
imgEl.src = imgUrl;
await untilImgLoaded;
return imgEl.naturalWidth;
}
Работает нормально.Это также (конечно) работает, если мы используем new Image()
вместо document.createElement("img")
.
Однако метод document.createElement("img")
не работает, если document
ссылается на документобъект <link>
импорта html.
Взгляните на этот пример , который импортирует этот HTML .Обратите внимание, что консоль выводит:
"Starting..."
512
512
и никогда не выводит окончательный 512
, а затем "Finished."
, как это и должно быть (на первый взгляд).Это потому что onload
событие imgEl
никогда не срабатывает;изображение никогда не загружается, если оно было создано с document.currentScript.ownerDocument.createElement
.Я проверял это в Chrome 69.
Это ожидаемое поведение или ошибка?Не должно ли это, по крайней мере, выдать ошибку, если невозможно создать изображение, используя <link>
's document
?