Est-il un moyen en javascript pour obtenir les noms de toutes les polices (ou de la police des familles) que le navigateur peut afficher? (Je veux donner à l'utilisateur un menu déroulant avec une liste de toutes les polices disponibles, et permettent à l'utilisateur de choisir une police de caractères.) Je préfère ne pas avoir à coder en dur cette liste à l'avance ou de l'envoyer vers le bas à partir du serveur. (Intuitivement, il semble que le navigateur doit savoir ce que les polices qu'il a et ce doit être exposé à javascript en quelque sorte.)
Réponses
Trop de publicités?La version JavaScript est un peu capricieux. Il obtient des polices en parcourant connu des polices et des essais.
La façon la plus précise (quoique d'avoir à utiliser une propriété plugin) est d' utiliser le Flash. Ici, vous pouvez obtenir la liste des polices de caractères sans avoir à les tester individuellement à l'aide de dimensions.
Vous allez avoir à décider si vous devez faire une liste exacte au détriment de ne pas fonctionner sur certains appareils ( iDevices, les navigateurs sans plugin Flash, etc), ou d'une liste partielle avec un meilleur support via JavaScript uniquement.
<SCRIPT>
function getFonts()
{
var nFontLen = dlgHelper.fonts.count;
var rgFonts = new Array();
for ( var i = 1; i < nFontLen + 1; i++ )
rgFonts[i] = dlgHelper.fonts(i);
rgFonts.sort();
for ( var j = 0; j < nFontLen; j++ )
document.write( rgFonts[j] + "<BR>" );
}
</SCRIPT>
<BODY onload="getFonts()">
<OBJECT id=dlgHelper CLASSID="clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b" width="0px" height="0px">
</OBJECT>
Dans ma recherche pour cela, j'ai aussi trouvé Font.jsqui ajoute un objet de Police un peu comme l'Image, il est donc possible de vérifier si une police est réellement prêt à l'emploi. Fonctionne également sur installer les polices système. La baisse est IE9+ seulement en raison de besoin d' Object.defineProperty
(les autres navigateurs), mais si vous faites du web moderne, cela semble être une option encore meilleure. (Je vais, hélas pour aller avec la réponse ci-dessus, upvoted et de passer pour l'instant. :))