Ho riscontrato questo problema nell'ultima versione di Chromium. Dopo la creazione del primo elemento utilizzando una famiglia di caratteri incorporata tramite @ font-face, mi vengono consegnati valori offsetXyz errati. Nel momento in cui viene eseguito lo script, il hook window.onload sarà già stato attivato e il font sarà quindi già stato caricato.@ Font-face e valore errato dell'attributo offsetWidth
Questo è ciò che lo script sembra (schematicamente):
var e = document.createElement("span");
e["innerText" in e?"innerText":"textContent"] = "fooBar";
e.style.fontFamily = "fontFaceEmbeddedFontFamily";
document.body.appendChild(e);
alert(e.offsetWidth); // Returns two different values
setTimeout(function() {
alert(e.offsetWidth); // The latter being correct
}, 1000);
Il valore viene aggiornato "silenziosamente". Sembra che non ci sia modo di attendere che corregga i valori, ma semplicemente setInterval: controlla il valore e poi visualizza la soluzione. Non mi piace fare cose sporche del genere.
Qualcuno ha qualche suggerimento su come procedere? Succede solo quando non è specificato il src: local(" ... ")
, il problema è quindi scaricato, specifico per i caratteri.
Forse si può trovare qualche aiuto qui: http://paulirish.com/2009/fighting-the-font-face-fout/ - Sembra che sia abbastanza comune per alcuni browser visualizzare il testo "non animato" fino a quando il carattere non è stato scaricato e quindi passato. – James
Bene, come ho detto, il font dovrebbe già essere caricato quando eseguo lo script come viene chiamato ** dopo ** l'evento window.onload attivato. È già caricato e applicato visivamente quando l'elemento viene aggiunto al corpo del documento. Solo il valore di offset è sbagliato. – Witiko