Existe uma maneira em javascript de obter os nomes de todas as fontes (ou famílias de fontes) que o navegador pode mostrar? (Quero fornecer ao usuário uma lista suspensa com uma lista de todas as fontes disponíveis e permitir que ele escolha uma fonte.) Prefiro não ter que codificar esta lista antes do tempo ou enviá-la do servidor. (Intuitivamente, parece que o navegador deve saber quais fontes ele possui e isso deve ser exposto ao javascript de alguma forma.)
fonte
Sim existe! Estou muito feliz por você ter feito essa pergunta, porque agora também quero usá-la.
+1 para pergunta e aqui está sua resposta :)
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
Resumo
fonte
Existe uma maneira de fazer isso usando
document.fonts
O valor retornado é a interface FontFaceSet do documento. A interface FontFaceSet é útil para carregar novas fontes, verificar o status das fontes carregadas anteriormente, etc.
Eu testei sem vincular nenhuma fonte no HTML, depois vinculei a fonte Roboto, testei novamente e ela foi adicionada ao resultado.
fonte
fonte
Solução FontFaceSet.check ()
Lista de fontes do Windows 10
Lista de fontes macOS / iOS
FontFaceSet.check ()
fonte
Em minha busca por isso, também encontrei Font.js , que adiciona um objeto Font muito parecido com Image, então é possível verificar quando uma fonte está realmente pronta para uso. Também funciona com fontes instaladas / do sistema. A desvantagem é o IE9 + apenas devido à necessidade
Object.defineProperty
(outros navegadores o têm), mas se você estiver fazendo uma web moderna, esta parece ser uma opção ainda melhor. (Eu terei, infelizmente, que ir com a resposta acima, voto positivo e continuando por enquanto. :))fonte
Eu adicionei dois métodos ao Detector de Lalit Patel acima:
Com isso você pode fazer:
código:
fonte
Talvez isso pudesse ser feito de uma maneira completamente diferente, usando uma spritesheet com imagens de fontes conhecidas para um caractere específico e comparando isso com instantâneos de um elemento de tela no qual o mesmo caractere é desenhado com o que o navegador informa como a mesma fonte. A comparação pode ser feita com algo como resemble.js .
Isso é mais lento, mas também deve nos permitir detectar quando o navegador está mentindo.
fonte
A resposta curta é. Não mudou muito em relação à detecção de fontes em navegadores em 2020, exceto que usar o Flash agora é uma ideia ainda pior .
Atualmente não há sistema nativo do navegador para "listar" todas as fontes disponíveis. No entanto, os navegadores permitem que você verifique se uma fonte está carregada / pronta usando a API FontFaceSet . É muito bem suportado em navegadores modernos.
A intenção é mostrar se uma fonte da web foi completamente baixada, MAS também funcionará com fontes do sistema. O problema é que você precisa fornecer uma lista de fontes a serem verificadas.
Portanto, em conjunto com um
user agent
teste (nem sempre preciso), você pode produzir uma lista de fontes comuns do sistema para cada tipo de dispositivo. Em seguida, teste essas e quaisquer fontes da web carregadas.NOTA: Isso NÃO fornecerá uma lista completa das fontes disponíveis, mas você pode verificar as fontes normalmente instaladas por produtos MS Office ou Adobe.
fonte
Recentemente, notei que se eu definir o valor context.font para uma tela HTML5, como algo inválido, como "lixo", a alteração será ignorada pela tela. Não sei se isso é específico do navegador, mas parece funcionar assim no Chrome. Eu também vi outros posts (a fonte canvas HTML 5 sendo ignorada ) que indicam que isso acontece em outros navegadores.
Pode-se então escrever uma string com o valor padrão, que acredito ser "10px sans serif" ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font ), definir a fonte para aquele que você está testando e escreva a string novamente. Se for igual ao primeiro desenho, a fonte não está disponível.
fonte