javascript - 如何在 JavaScript 中获取渲染的字体?

标签 javascript html css google-chrome

Google Chrome 在 DevTools 中显示呈现的字体。

例如,给定:

font-family: Montserrat, Helvetica, sans-serif;

并且 Montserrat 字体丢失/禁用,Chrome 告诉我们正在呈现 Helvetica:

enter image description here

有没有办法在 JavaScript 中获取渲染的字体? (即使它只适用于 Chrome)


注意事项:

  1. This solution建议 getComputedStyle(...).fontFamily,但它返回 CSS 声明 "Montserrat, Helvetica, sans-serif",而不是实际呈现的字体。
  2. This solution使用 puppeteer,但我无法弄清楚如何完全在 DevTools 中实现相同的效果(没有 puppeteer)。

最佳答案

仍然无法从 Web-API 访问此信息。

Houdini 组中正在进行关于包含 font-metrics API 的讨论。 ,那应该包括类似的东西,但它甚至还没有作为规范草案被提议,而且路上会有很多负担。

What font(s) are being used? This is complicated because multiple fonts can be used per paragraph, per line, per word, and even per glyph. The fonts should be exposed in the form of handles with complete font information, and (for web fonts) a handle to the raw font data. dbaron & eae are going to own this area and propose an API.

确实,可以为字形 ̂ (U+0302) 使用一种字体,为字形 a (U+0061) 使用另一种字体,这将使组合字形 â 实际上会使用两种不同的字体。

目前的讨论似乎指向一个 Font interface可从 document.measureElementdocument.measureText 方法获得。该接口(interface)将公开两个属性:DOMString name 和数字 glyphsRendered。 然而,这些仍然是讨论,还没有作为草案提出,还有很多讨论要做,我不会屏住呼吸等待它很快在任何地方实现。


现在,有 hack,比如 numerous other Q/A already told 不要坚持接受那里的答案,这意味着最简单的看渲染的大小,更高级的看渲染的像素,但是黑客,他们不会在所有情况下工作。
例如,我的系统上可以有一个自定义字体,它只会呈现从知名字体借用的一些字符,没有这样的黑客能够判断浏览器是否回退到该字体或实际知名字体。

唯一确定的方法是保持控制并使用网络字体。

关于javascript - 如何在 JavaScript 中获取渲染的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57853292/

相关文章:

javascript - 使 Div 在可滚动溢出中聚焦并可见

html - Bootstrap 中的三区导航栏

javascript - Dojo:在 OnChange 上获取 inlineEditBox 的 ID

javascript - 使用javascript将导航栏从不同的文件夹加载到html页面

javascript - Vue.js 使用 post 方法重定向

javascript - Android 的 HTML5 应用程序可以在主屏幕上有一个小部件吗?

html - 如何去除 svg 边缘的背景色

html - 使用 CSS 垂直对齐未知高度的响应图像

javascript - 在 JavaScript 中向整数添加尾随数字

html - 不应用 Angular 中的 ng5-slider 样式