Mam WebView w aplikacji Cocoa (macgap).

(UWAGA, nie mówię o UIWebView w aplikacji na iOS)

W moim pliku CSS znajduje się kilka niestandardowych deklaracji czcionek:

@font-face{
    font-family:'Quivira';
    src:url("./Quivira.ttf") format("truetype");
    font-weight:normal;
    font-style:normal;
}

Nie mogę jednak ich załadować - wydaje mi się, że jest to jakiś problem z bezpieczeństwem.

Czasami widzę, że w konsoli pojawia się błąd „Niedozwolone ładowanie lokalnego zasobu: Quivira.ttf” (jednak nie zawsze to pokazuje)

Co może być tego przyczyną? Plik index.html jest ładowany za pomocą protokołu file:///, więc nie powinno być problemu z bezpieczeństwem, ponieważ jest już lokalny i dlatego powinien być w stanie załadować lokalne zasoby.

Myślę, że to może być błąd w webkicie.

Czy każdy może załadować niestandardowe czcionki w Cocoa WebView?

1
asgeo1 29 sierpień 2012, 11:02

2 odpowiedzi

Najlepsza odpowiedź

Wypróbowałem dwa podejścia do ładowania stron internetowych z niestandardowymi czcionkami.

  • Z pakietu aplikacji (przy użyciu NSBundle)
  • Ze ścieżki lokalnej określonej przez użytkownika (przy użyciu ścieżki bezwzględnej)

W obu przypadkach jestem w stanie z powodzeniem wyświetlać niestandardowe czcionki. Znajduje się tam plik HTML, a obok niego plik czcionki .ttf. W pliku HTML zdefiniowałem @font-face w inline CSS.

W drugim przypadku możesz podać dowolną pełną ścieżkę z lokalnego systemu plików, z którego zostanie załadowany widok sieciowy (np. /Users/johndoe/Desktop/maiwebsite/index.html).

Kod jest na Github.

I z innej odpowiedzi na SO:

  1. Zamiast samodzielnie pobierać ścieżkę do zasobu i zszywać do niej podścieżkę, poproś pakiet o podanie prawidłowej ścieżki.
  2. Zamiast w ogóle obsługiwać ścieżkę, poproś pakiet o podanie prawidłowego adresu URL. (Wymaga systemu Mac OS X 10.6 lub nowszego).

Jeśli to nie pomoże, czy możesz gdzieś umieścić swój kod, abyśmy mogli spróbować go debugować?

4
Community 23 maj 2017, 15:27

W przypadku WKWebView (WebView jest teraz przestarzałe) załaduj niestandardowe czcionki z pakietu MacApp, takie jak:

[_webView loadHTMLString:htmlContent baseURL:[[NSBundle mainBundle] resourceURL]];

W przeciwieństwie do iOS, gdzie wszystko, co trzeba dostarczyć dla zasobów pakietu, to: [[NSBundle mainBundle] bundlePath] (pakiet iOS jest bardziej płaski), w przypadku MacApps ścieżka do zasobów jest bardziej złożona i sama bundlePath NIE będzie działać. Powyższe podejście DZIAŁA.

W swoim CSS po prostu użyj @font-face w ten sposób, a wszelkie czcionki w lokalizacji określonej przez resourceURL zostaną znalezione.

@font-face {font-family:'myfont';src:url('myfont.ttf');}
0
Cliff Ribaudo 28 grudzień 2019, 21:39