Comment détecter un de la police a été utilisé dans une page web?
Supposons que j'ai la règle CSS suivante dans ma page:
body {
font-family: Calibri, Trebuchet MS, Helvetica, sans-serif;
}
Comment puis-je détecter une des polices a été utilisé dans le navigateur de l'utilisateur?
Modifier pour des gens qui se demandent pourquoi je veux le faire: La police je suis de détection contient du glyphe qui ne sont pas disponibles dans d'autres polices et lorsque l'utilisateur n'a pas la police, je veux afficher un lien de demander à l'utilisateur de télécharger cette police afin qu'ils puissent utiliser mon application web avec la bonne police.
Actuellement, je suis en affichant le téléchargement de polices lien pour tous les utilisateurs, je veux afficher uniquement ce pour les personnes qui n'ont pas la bonne police.
- Une chose à garder à l'esprit est que certains navigateurs vont remplacer certaines polices manquantes avec des polices similaires, ce qui est impossible à détecter à l'aide de JavaScript/CSS truc. Par exemple, les Fenêtres des navigateurs substitut Arial, Helvetica, si elle n'est pas installée. Le truc MojoFilter et dragonmatank mentionné signale toujours que l'Helvetica est installé, même s'il ne l'est pas.
- Une petite note de prudence: Si vous proposez un lien pour télécharger Calibri, être conscients que, même s'il est livré à l'intérieur de plusieurs produits Microsoft, c'est pas une police libre, et vous êtes à la violation du droit d'auteur par l'offrant pour le téléchargement.
Vous devez vous connecter pour publier un commentaire.
Je l'ai vu faire dans un genre de terrible, mais assez fiable. Fondamentalement, un élément est défini pour utiliser une police spécifique et une chaîne est définie à cet élément. Si la police définie pour l'élément n'existe pas, il faut de la police de l'élément parent. Donc, ce qu'ils font est de mesurer la largeur de la chaîne affichée. Si elle correspond à ce que l'on attend de la police souhaitée par opposition à la dérivée de la police, il est présent. Cela ne fonctionne pas pour les polices à espacement fixe.
Voici d'où il vient:
Javascript/CSS font Détecteur (ajaxian.com; 12 Mar 2007)
measureText
de lacanvas
élément: github.com/Wildhoney/DetectFontJ'ai écrit un simple JavaScript outil que vous pouvez utiliser pour vérifier si une police est installé ou non.
Il utilise une technique simple et devrait être correct la plupart du temps.
jFont Checker sur github
@pat en Fait, Safari ne donne pas la police utilisée, Safari au lieu de cela renvoie toujours la première police de la pile indépendamment de savoir si il est installé, au moins dans mon expérience.
En supposant que l'Helvetica est installé/utilisé, vous obtiendrez:
Gecko.
J'ai pris un pass à ce problème et a créé Police Dépiler, qui teste chaque police dans une pile et retourne la première installation d'un seul. Il utilise le truc que @MojoFilter mentionne, mais ne renvoie que la première, si plusieurs sont installés. Bien qu'il ne souffre de la faiblesse de @tlrobinson mentionne (Windows va remplacer Arial, Helvetica silencieusement et le rapport que l'Helvetica est installé), il fonctionne bien.
Une technique qui fonctionne, c'est de regarder le calculées style de l'élément. C'est pris en charge dans Opera et Firefox (et je recon dans safari, mais je n'ai pas testé). IE (7 au moins), fournit une méthode pour obtenir un style, mais il semble être tout ce qui était dans la feuille de style, pas le résultat d'un calcul de style. Plus de détails sur quirksmode: Obtenir Les Styles
Ici une fonction simple pour saisir la police utilisée dans un élément:
Si la règle CSS pour cet été:
Alors il doit retourner helvetica si ce est installé, si ce n'est, arial, et enfin, le nom du système par défaut sans-serif. Notez que la commande de polices dans votre CSS déclaration est importante.
Une intéressante hack vous pouvez également essayer de se créer beaucoup d'éléments cachés avec beaucoup de polices différentes pour essayer de détecter des polices installées sur une machine. Je suis sûr que quelqu'un pourrait faire un chouette police de la collecte des statistiques de la page avec cette technique.
Une forme simplifiée est:
Si vous avez besoin de quelque chose de plus complet, de vérifier cette out.
Il existe une solution simple - il suffit d'utiliser
element.style.font
:Cette fonction va exactement de faire ce que vous voulez. Sur l'exécution Il sera de retour le type de police de l'utilisateur/navigateur. Espérons que cela aidera.
Une autre solution serait d'installer la police automatiquement via
@font-face
qui pourrait nier la nécessité pour la détection.Bien sûr, il ne serait pas résoudre tous les problèmes de droit d'auteur, cependant, vous pouvez toujours utiliser un freeware de police ou même faire votre propre police. Vous aurez besoin de
.eot
&.ttf
fichiers pour fonctionner à son meilleur.Calibri est une police détenue par Microsoft, et ne devrait pas être distribué gratuitement. Aussi, l'intervention d'un utilisateur à télécharger une police spécifique n'est pas très convivial.
Je suggère l'achat d'une licence pour la police et à son intégration dans votre application.
Je suis à l'aide de Mouillage. Vous avez juste à glisser la Source bouton à votre barre de favoris, cliquez sur, puis cliquez sur un texte spécifique sur le site web. Il affichera alors la police de ce texte.
https://fount.artequalswork.com/
Vous pouvez utiliser ce site web :
http://website-font-analyzer.com/
C'est exactement ce que vous voulez...
Vous pouvez mettre Adobe Vide dans la police-famille après la police que vous souhaitez voir, et puis tout les glyphes pas dans cette police ne sera pas rendu.
par exemple:
Autant que je suis conscient qu'il n'existe pas de méthode JS dire les glyphes d'un élément sont rendus par la police dans la police de la pile pour cet élément.
Ceci est compliqué par le fait que les navigateurs ont des paramètres de l'utilisateur pour serif/sans-serif/polices à espacement fixe et ils ont aussi leur propre codée en dur de repli des polices qu'ils vont l'utiliser si un glyphe n'est pas trouvée dans l'une des polices de caractères dans une police de la pile. Afin de navigateur peut rendre certains glyphes d'une police qui n'est pas dans la police de la pile ou le navigateur de l'utilisateur des paramètres de police. Chrome Dev Tools va vous montrer chaque rendue à la police pour les glyphes dans l'élément sélectionné. Donc, sur votre machine, vous pouvez voir ce qu'il fait, mais il n'y a aucun moyen de savoir ce qui se passe sur l'ordinateur de l'utilisateur.
Il est également possible que le système de l'utilisateur peuvent jouer un rôle dans ce domaine, comme par exemple Fenêtre n'Substitution de Polices au niveau glyphe.
donc...
Pour les glyphes qui vous intéresse, vous n'avez aucun moyen de savoir s'ils seront rendus par le navigateur de l'utilisateur/système de secours, même si elles n'ont pas la police de caractères que vous spécifiez.
Si vous voulez le tester en JS vous pourrait rendre les glyphes individuels avec une police de caractères de la famille, y compris Adobe Vide et de mesurer leur largeur pour voir si c'est zéro, MAIS vous auriez à effectuer une itération complète chaque glyphe et chaque police a voulu tester, mais bien que vous pouvez connaître les polices utilisées dans un des éléments de la police de la pile il n'y a aucun moyen de savoir quelles polices le navigateur de l'utilisateur est configuré pour utiliser au moins certains de vos utilisateurs la liste des polices de caractères que vous itérer sera incomplète. (Il n'est également pas d'avenir si de nouvelles polices de sortir et de commencer à être utilisé.)