Bir metin alanına bir karakter girilirse ve o anda uygulanmış font bu karakteri desteklemiyorsa, bu karakter için bir yedek yazı tipi kullanılır. Bu olduğunda Javascript veya başka yollarla söylemek mümkün mü? Belirli bir karakter font tarafından desteklenmiyorsa kullanıcıyı uyaran bir betik oluşturmaya çalışıyorum. Yardım ettiğin için teşekkür ederim!Bir tarayıcının CSS'de belirtilen birincil yerine bir yedek yazı tipi kullandığını algılamak mümkün mü?
cevap
fontkit.js veya opentype.js, hatta Font.js gibi bir şey için bir işe benzer, hepsi glif desteği için yazı tiplerini test edebilir. Sistem yazı tipleri bu şekilde ele alınmaz (Font.js işe yarayabilir, muhtemelen test edilen glif için 0 genişliğini rapor edecektir), ancak bunlar genellikle hangi web sitelerinin hangi gliflerin desteklendiğini bildiğimiz "web güvenli" fontlardır. herkes aynı olanları kullanır. Yine de, özel bir fontta "delikler" test etmek için, daha önce sözü edilen üçten herhangi birinin uygulamak istediğiniz şeyi yapması gerekir.
Font.js tarafından ilgimi çeken en basit ve bir düğüm modülü değil. Ancak belgeleri okurken belirli bir glifin varlığını nasıl test edeceğimi anlayamadım. Bunu başarmak için uygun yöntemlere işaret edebilir misiniz? – Hendeca
'font.measureText (textString, fontSize));', muhtemelen görüntülemeye ihtiyaç duyan tüm glifler için bir 'forEach' döngüsü olarak arıyorsunuz. Genişlik 0 olan bir metrik nesnesini veren herhangi bir 'measureText', söz konusu yazı tipi tarafından pek desteklenmez. –
, artık sadece "yalnızca düğüm için" veya "yalnızca tarayıcı için" kütüphaneleri olan bir dünyada yaşamadığımıza dikkat çekiyor. Hepsi JS'dir, bu yüzden çoğu zaman, her ikisi de iyi çalışır (tıpkı saf tarayıcı çözümleri için olduğu gibi) yerinde doğru şimleri vardır. OpenType.js, her ikisi için de çalışır. FontKit.js, tarayıcı için ("browserify --standalone" veya bir şeyle birlikte) kolayca paketlenebilir ve Font.js, bir tuvali bindirmeniz şartıyla, Düğümde mutlu bir şekilde çalışır. –
Yazı tipindeki karakterin genişliğini kontrol ederek ve geri dönüşle karşılaştırarak, geri dönüş yazı tipini kullanıyorsa, çıkabilirsiniz. Yani sadece gerçekten açık olmak
var text = $(".main-text").html();
var chars = text.split("");
for(var i = 0, len = chars.length; i < len; i++){
\t var str = chars[i]; str+=str;str+=str;str+=str;
\t $("#test1, #test2").html(str);
\t var w1 = $("#test1").width();
\t var w2 = $("#test2").width();
\t if(w1 == w2 && w1 != 0){
\t \t alert("char not supported " + chars[i]);
\t }
}
.main-text {
width: 50%;
height: 300px;
font-family: Impact, sans-serif;
font-size: 16px;
}
#test1, #test2 {
position: fixed;
top: -100px;
font-size: 16px;
}
#test1 {
font-family: Impact, sans-serif;
}
#test2 {
font-family: sans-serif;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="main-text">
Serif Font
This E is not supported: ể
</textarea>
<span id="test1"></span>
<span id="test2"></span>
Belki de 'test1' ve 'test2' elemanlarını burada farklı font-aileleriyle tanımlamanız gerektiği açık değil. Ve büyük bir yazı tipi boyutu belirlerseniz, daha küçük farklılıklar algılanır. – Kwebble
Tüm kodu da içeren cevabı düzenledim. – jvilhena
Bu, tüm yazı tipleriyle çalışmadığını bulsam da akıllıca bir çözümdür. Yazı tipini Didot'a bir test olarak değiştirmeyi denedim ve her karakterin geçersiz olarak eşleştiğini tespit ettim. Textarea'daki değişiklikleri dinleyen bir etkinlik dinleyicisi ekledim ve içeriği html() yerine val() ile çektim; böylece metni değiştirip kolaylık sağlamak için canlı sonuçları görebildim. https://jsfiddle.net/Hendeca/2xpLzuyk/ – Hendeca
- 1. Bir görünüme birincil anahtar ayarlamak mümkün mü?
- 2. Yazı tipi stilini (kalın, italik) algılamak için OCR kullanabilir miyim?
- 3. CSS'de yazı tipi yumuşatmayı devre dışı bırakmak mümkün mü?
- 4. PMD kuralındaki otomatik kutuları algılamak mümkün mü?
- 5. Birincil bileşende React Native içinde bir işlevi çağırmak mümkün mü?
- 6. Windows'un yazı tipi bağlama için seçtiği yazı tiplerini belirlemek mümkün mü?
- 7. Swing ile Harika Yazı Yazı tipi:
- 8. GDI +? Kullanarak metin çizerken kesin bir yazı tipi boyutu tanımlamak mümkün mü?
- 9. iTextSharp - Aynı hücre ve satır için farklı bir yazı tipi rengi ayarlamak mümkün mü?
- 10. Birincil yedek olduğunda Django'daki bir yedekleme veritabanına nasıl geçebilirim?
- 11. Std :: rc :: Rc ile bir özellik tipi kullanmak mümkün mü?
- 12. UIPickerView Yazı Tipi
- 13. Alt öğenin onclick'i tetiklendiğinde tarayıcının bağlantıyı izlemesini durdurmak mümkün mü?
- 14. TypefaceSpan veya StyleSpan'ı özel bir Yazı Tipi ile nasıl kullanabilirim?
- 15. Tek bakışta tüm viewDidAppear çağrılarını algılamak mümkün mü?
- 16. Tüm dosya yerine tek bir satıra ödeme yapmak mümkün mü?
- 17. Bir Google Chrome uzantısıyla yazı tipi paketleme
- 18. Yazı tipi boyutunu bir AlertDialog olarak değiştirme
- 19. Safari'de yazı tipi tutarsızlıkları
- 20. Bir Google Yazı Tipi için özel ad belirtilebilir mi?
- 21. sqlalchemy bir IDENTITY tür yapmadan bir tamsayı parçası ile bir bileşik birincil anahtar oluşturmak mümkün mü?
- 22. Yazı tipi boyutunu değiştirmeden yazı tipi kalınlığını kontrol etme
- 23. iFrame için yazı tipi boyutunu ve yazı tipi-ailesini değiştirme
- 24. UIWebView kullanarak, özel bir yazı tipi kullanabilir miyim?
- 25. Özel Yazı Tipi Android
- 26. UINavigationBar özel yazı tipi
- 27. Özel yazı tipi iPhone
- 28. Pixi.js özel yazı tipi
- 29. bu yazı tipi nedir? (ubuntu terminal yazı tipi)
- 30. Yazı tipi ile hizalama yazı tipi ile harika simgesi
: Bu test muhtemelen% 100 güvenilir değildir, ancak böyle bir şey yapabilecekken aksine tarayıcı (yazı tipi vardır "font-face: wanglebrat, sans-serif" ve tarayıcının "wanglebrat" özelliği yoktur ve "sans-serif" işlevini kullanmazsınız), ancak * belirli karakterlerin * ne zaman eksik olduğunu bilmek istersiniz? –
@ T.J.Crowder Evet, doğru – Hendeca
Geçerli yazı tipinin desteklemediği bir girdiye bir karakter girilirse tarayıcı gerçekten farklı bir yazı tipi kullanıyor mu? – adeneo