Existe-t-il un moyen en javascript pour obtenir les noms de toutes les polices (ou familles de polices) que le navigateur peut afficher? (Je veux donner à l'utilisateur une liste déroulante avec une liste de toutes les polices disponibles et permettre à l'utilisateur de choisir une police.) Je préférerais ne pas avoir à coder en dur cette liste à l'avance ou à l'envoyer à partir du serveur. (Intuitivement, il semble que le navigateur devrait savoir quelles polices il possède et cela devrait être exposé à javascript d'une manière ou d'une autre.)
la source
Oui il y a! Je suis si heureux que vous ayez posé cette question parce que je veux maintenant l'utiliser aussi.
+1 pour la question, et voici votre réponse :)
http://www.lalit.org/lab/javascript-css-font-detect
Code de http://www.lalit.org/wordpress/wp-content/uploads/2008/05/fontdetect.js?ver=0.3
Résumé
la source
Il existe un moyen de le faire en utilisant
document.fonts
La valeur renvoyée est l'interface FontFaceSet du document. L'interface FontFaceSet est utile pour charger de nouvelles polices, vérifier l'état des polices précédemment chargées, etc.
Je l'ai testé sans lier de polices dans le HTML, puis lié la police Roboto, testé à nouveau et il a été ajouté au résultat.
la source
la source
Solution FontFaceSet.check ()
Liste des polices Windows 10
Liste des polices macOS / iOS
FontFaceSet.check ()
la source
Dans ma recherche pour cela, j'ai également trouvé Font.js , qui ajoute un objet Font un peu comme Image, il est donc possible de vérifier quand une police est réellement prête à être utilisée. Fonctionne également sur les polices installées / système. L'inconvénient est IE9 + uniquement en raison du besoin
Object.defineProperty
(d'autres navigateurs l'ont), mais si vous faites du Web moderne, cela semble être une option encore meilleure. (Je vais, malheureusement, devoir aller avec la réponse ci-dessus, voter pour le moment et passer à autre chose pour le moment. :))la source
J'ai ajouté deux méthodes au détecteur de Lalit Patel ci-dessus:
Avec cela, vous pouvez faire:
code:
la source
Peut-être que cela pourrait être fait d'une manière complètement différente, en utilisant une feuille de sprites avec des images de polices connues pour un caractère spécifique et en la comparant avec des instantanés d'un élément de canevas sur lequel le même caractère est dessiné avec ce que le navigateur rapporte comme la même police. La comparaison peut être faite avec quelque chose comme resemble.js .
C'est plus lent, mais devrait également nous permettre de détecter quand le navigateur ment.
la source
La réponse courte est. Peu de choses ont changé en ce qui concerne la détection des polices dans les navigateurs en 2020, sauf que l'utilisation de Flash est maintenant une idée encore pire .
Il n'y a actuellement aucun système natif de navigateur pour "lister" toutes les polices disponibles. Cependant, les navigateurs vous permettront de vérifier si une police est chargée / prête à l'aide de l' API FontFaceSet . Il est assez bien pris en charge dans les navigateurs modernes.
Ceci est destiné à montrer si une police Web est complètement téléchargée MAIS cela fonctionnera également pour les polices système. Le hic, c'est que vous devez fournir une liste de polices à vérifier.
Ainsi, en conjonction avec un
user agent
test (pas toujours précis), vous pouvez produire une liste de polices système courantes pour chaque type de périphérique. Testez ensuite ces polices et toutes les polices Web que vous chargez.REMARQUE: Cela ne vous donnera PAS une liste complète des polices disponibles, mais vous pouvez vérifier les polices couramment installées par les produits MS Office ou Adobe.
la source
J'ai récemment remarqué que si je règle la valeur context.font pour un canevas HTML5, sur quelque chose d'invalide, tel que "junk", le changement est ignoré par le canevas. Je ne sais pas si cela est spécifique au navigateur, mais cela semble fonctionner de cette façon sur Chrome. J'ai également vu d'autres articles (la police HTML 5 canvas étant ignorée ) qui indiquent que cela se produit dans d'autres navigateurs.
On pourrait alors écrire une chaîne avec la valeur par défaut, qui je crois est "10px sans serif" ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font ), définir la police à celui que vous testez et écrivez à nouveau la chaîne. S'il s'agit de la même chose que le premier dessin, la police n'est pas disponible.
la source