¿Hay alguna forma en JavaScript para obtener los nombres de todas las fuentes (o familias de fuentes) que el navegador puede mostrar? (Quiero darle al usuario un menú desplegable con una lista de todas las fuentes disponibles y permitir que el usuario elija una). Preferiría no tener que codificar esta lista antes de tiempo o enviarla desde el servidor. (Intuitivamente, parece que el navegador debería saber qué fuentes tiene y esto debería estar expuesto a javascript de alguna manera).
fuente
¡Sí hay! Estoy muy contento de que hayas hecho esta pregunta porque ahora quiero usar esto también.
+1 para la pregunta, y aquí está tu respuesta :)
http://www.lalit.org/lab/javascript-css-font-detect
Código de http://www.lalit.org/wordpress/wp-content/uploads/2008/05/fontdetect.js?ver=0.3
Resumen
fuente
Hay una forma de hacer esto usando
document.fonts
El valor devuelto es la interfaz FontFaceSet del documento. La interfaz FontFaceSet es útil para cargar nuevas fuentes, verificar el estado de las fuentes cargadas previamente, etc.
Lo probé sin vincular ninguna fuente en el HTML, luego vinculé la fuente Roboto, lo probé nuevamente y se agregó al resultado.
fuente
fuente
Solución FontFaceSet.check ()
Lista de fuentes de Windows 10
Lista de fuentes macOS / iOS
FontFaceSet.check ()
fuente
En mi búsqueda de esto, también encontré Font.js , que agrega un objeto Font muy parecido a Image, por lo que es posible verificar cuándo una fuente está realmente lista para usar. También funciona con fuentes instaladas / del sistema. La desventaja es IE9 + solo debido a la necesidad
Object.defineProperty
(otros navegadores lo tienen), pero si está utilizando la web moderna, esta parece una opción aún mejor. (Lamentablemente, tendré que seguir con la respuesta anterior, votar a favor y continuar por ahora. :))fuente
Agregué dos métodos al Detector de Lalit Patel arriba:
Con esto puedes hacer:
código:
fuente
Tal vez esto se podría hacer de una manera completamente diferente, usando una hoja de sprites con imágenes de fuentes conocidas para un personaje específico y comparándola con instantáneas de un elemento de lienzo en el que se dibuja el mismo carácter con lo que el navegador informa como la misma fuente. La comparación se puede hacer con algo como parecido.js .
Esto es más lento, pero también debería permitirnos detectar cuando el navegador está mintiendo.
fuente
La respuesta corta es. No ha cambiado mucho con respecto a la detección de fuentes en los navegadores en 2020, excepto que usar Flash ahora es una idea aún peor .
Actualmente no existe un sistema nativo del navegador para "enumerar" todas las fuentes disponibles. Sin embargo, los navegadores le permitirán verificar si una fuente está cargada / lista usando la API FontFaceSet . Es bastante compatible con los navegadores modernos.
Esto está destinado a mostrar si una fuente web está completamente descargada, PERO también funcionará para las fuentes del sistema. El problema es que debe proporcionar una lista de fuentes para verificar.
Por lo tanto, junto con una
user agent
prueba (no siempre precisa), puede producir una lista de fuentes comunes del sistema para cada tipo de dispositivo. Luego, pruebe con esas y las fuentes web que cargue.NOTA: Esto NO le dará una lista completa de las fuentes disponibles, pero puede verificar las fuentes comúnmente instaladas por los productos de MS Office o Adobe.
fuente
Recientemente he notado que si configuro el valor context.font para un lienzo HTML5, en algo no válido, como "basura", el lienzo ignora el cambio. No sé si esto es específico del navegador, pero parece funcionar de esta manera en Chrome. También he visto otras publicaciones ( se ignora la fuente de lienzo HTML 5 ) que indican que sucede en otros navegadores.
Luego, se podría escribir una cadena con el valor predeterminado, que creo que es "10px sans serif" ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font ), establezca la fuente a uno que esté probando y vuelva a escribir la cadena. Si es igual que el primer dibujo, la fuente no está disponible.
fuente