给定图像的 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")
。
但是,如果引用html 导入的文档对象,则该document.createElement("img")
方法不起作用。document
<link>
"Starting..."
512
512
并且永远不会输出最终的512
and then "Finished."
,就像它(似乎)应该那样。那是因为永远不会触发的onload
事件imgEl
;如果图像是用创建的,则永远不会加载document.currentScript.ownerDocument.createElement
。我已经在 Chrome 69 中对此进行了测试。
这是预期的行为,还是错误?如果无法使用<link>
's创建图像,它至少不应该抛出错误document
吗?