我在最新版本的Chromium中遇到了此问题。在使用通过@ font-face嵌入的字体系列创建第一个元素之后,我将获得错误的offsetXyz值。在执行脚本时,将已经触发window.onload钩子(Hook),因此将已经加载了字体。

这是脚本的样子(示意上):

var e = document.createElement("span");
e["innerText" in e?"innerText":"textContent"] = "fooBar";
e.style.fontFamily = "fontFaceEmbeddedFontFamily";
document.body.appendChild(e);

alert(e.offsetWidth);   // Returns two different values
setTimeout(function() {
  alert(e.offsetWidth); // The latter being correct
}, 1000);

该值“无提示”更新。似乎没有办法等待它更正值,而只是setInterval-check值,然后呈现解决方案。我不喜欢那样做肮脏的东西。

有人对如何进行有任何建议吗?仅当未指定src: local(" ... ")时才会发生,因此该问题是特定于下载字体的。

最佳答案

您已经自己给出了答案。设置src: local()并不会发生这种情况-通常,当您使用@font-face时,请坚持使用bulletproof syntax,因为这样做是为了克服浏览器问题,例如您在此处遇到的问题。

10-04 21:50