Mam problem z JavaScript FileReader i/lub CSS @ font-face (lub może to być problem HTML DOM - nie jestem pewien).
Przeciągam plik czcionki z pulpitu i upuszczam go do okna przeglądarki z niewielką pomocą przeciągnięcia obiektu HTML5 &, a następnie odebrania obiektu Plik i próby obsłużenia go.
Oto kod JavaScript, który robi to:Dodawanie @ font-face w locie
//getting the File object
var file = e.dataTransfer.files[0];
var reader = new FileReader();
reader.onload = function(event) {
var contents = event.target.result;
//most important thing here - appending style into HEAD (jQuery)
$('head').append('<style type="text/css">@font-face { font-family:"myFont";
src: url("'+contents+'"); }</style>');
};
reader.onerror = function(event) {
console.error("File could not be read! Code " + event.target.error.code);
};
//read file
reader.readAsDataURL(file);
Finał CSS dołączany do głowa wygląd jest tak:
<style type="text/css">
@font-face {
font-family: "myFont";
src: url("data:;base64;Ahs5hD3..."); // here come's the URL of 'cached' font. A lots of letters and digits
}
</style>
Sam CSS jest dołączanie bez żadnego problemu. Problem polega na tym, że rodzina czcionek nie jest stosowana. Po całej magii używam Firebuga (lub jego odpowiednika w Chrome) do ustawienia rodziny czcionek niektórych elementów na "myFont", ale stosuje się domyślną czcionkę (Times New Roman, jak sądzę).
Wiem, że mogę przesłać czcionkę, aby to osiągnąć (np. Z PHP), ale nie o to chodzi.
Możliwe pytanie:
1. Czy możliwe jest dołączanie stylu CSS w locie i używanie go bez ponownego ładowania (prawdopodobnie PRAWDA, jeśli jest to możliwe przy użyciu firebuga)?
2. Czy można użyć pliku czcionki z jeszcze nie przesłanego (lokalnego?) Zasobu, który został zwrócony przez funkcję javascript getAsDataUrl (PRAWDA - jest to możliwe w przypadku pliku obrazu)?
Obie rzeczy są możliwe w pewnych okolicznościach, więc co mam zrobić źle? (Może plik typu MIME? Zauważ, że w części z fontem src część parametru "data:" jest pusta)
wszelkie aktualizacje w tej sprawie? w chrome działa to jak urok, ale nie w firefoxie lub np. –
Może to pomoże: 'data: [] [; charset = ] [; base64], ' Jeśli pominięto , domyślnie jest to tekst/zwykły ; charset = US-ASCII. (Jako skrót można pominąć typ, ale podano parametr charset.) –
Eraden
@Eraden, dziękuję za sugestię. Właściwie porzuciłem ten temat dawno temu, ale spróbuję znaleźć czas, aby ponownie przyjrzeć się problemowi. – matewka