Cocoa WebView(macgap) - 如何使用自定义字体?

时间:2012-08-29 07:02:06

标签: cocoa fonts webview webkit

我在Cocoa应用程序中有一个WebView(macgap)。

注意我不是在讨论iOS应用中的UIWebView

在我的CSS文件中,有一些自定义字体声明:

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

我无法加载这些 - 我相信某种安全问题。

有时候,我可以看到控制台中有一个错误“不允许加载本地资源:Quivira.ttf ”(虽然它并不总是显示)

可能导致这种情况的原因是什么? index.html文件是通过file:///协议加载的,因此不存在安全问题,因为它已经是本地的,因此可以加载本地资源。

我认为它可能是webkit中的一个错误。

是否有人能够在Cocoa WebView中加载自定义字体?

2 个答案:

答案 0 :(得分:3)

我尝试了两种使用自定义字体加载网页的方法。

  • 来自应用包(使用NSBundle)
  • 从用户指定的本地路径(使用绝对路径)

在这两种情况下,我都能成功显示自定义字体。有一个HTML文件,旁边是.ttf字体文件。在HTML文件中,我在内联CSS中定义了@ font-face。

在第二种情况下,您可以从本地文件系统提供任何完整路径,webview将从中加载(例如/Users/johndoe/Desktop/maiwebsite/index.html)。

<强> Code is on Github

来自another answer on SO

  1. 而不是获取资源路径并自行将子路径装订到其上ask the bundle to give you the correct path
  2. 而不是处理路径ask the bundle to give you the correct URL。 (需要Mac OS X 10.6或更高版本。)
  3. 如果这没有用,那么你可以把你的代码放在某个地方,以便我们可以尝试调试它吗?

答案 1 :(得分:0)

对于WKWebView(现已弃用WebView),请从MacApp捆绑软件中加载自定义字体,如下所示:

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

与iOS一样,所有需要提供捆绑资源的人都是:[[NSBundle mainBundle] bundlePath](iOS捆绑更便宜),对于MacApps,资源的路径更加复杂,单独的bundlePath将无法工作。以上方法确实有效。

在CSS中只需像这样使用@font-face,就会找到resourceURL指定位置的所有字体。

@font-face {font-family:'myfont';src:url('myfont.ttf');}