【发布时间】:2018-09-15 12:42:25
【问题描述】:
这是一个返回图像宽度的函数,给定图像的 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 引用<link> html 导入的文档对象,document.createElement("img") 方法不起作用。
看看this example,它导入了this html。注意控制台输出:
"Starting..."
512
512
并且永远不会输出最终的512,然后是"Finished.",就像(似乎)应该的那样。那是因为imgEl 的onload 事件永远不会触发;如果图像是用document.currentScript.ownerDocument.createElement 创建的,它永远不会加载。我已经在 Chrome 69 中对此进行了测试。
这是预期的行为,还是错误?如果无法使用<link> 的document 创建图像,它至少不应该抛出错误吗?
【问题讨论】:
-
Firefox 似乎根本没有为
<link>运行 HTTP 请求。 -
...并且 MDN 文档没有提到“import”作为“rel”属性的公认值。
-
@Pointy Firefox 尚未实现导入(并且在当前状态下可能不会这样做)。我应该提到这一点(并且可能添加了 chrome 标签)。您需要添加 polyfill 以在 firefox 上进行测试(我尝试过,但也无法使用它)。关于它似乎工作正常的事实,我似乎不小心链接到了旧版本。我已经更新了链接,可以肯定的是:jsbin.com/kuruluzike/2/edit?html,console 如果那是你的,请删除关闭投票。
-
并且要明确一点:我完全可以使用
new Image()来解决这个问题,但我只是好奇它是否是铬错误。这不是“请为我调试代码”的问题。
标签: javascript google-chrome web-component custom-element html5-import