1

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

注意我不是在谈论 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 中加载自定义字体吗?

4

2 回答 2

4

我尝试了两种方法来加载带有自定义字体的网页。

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

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

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

代码在 Github 上

而从另一个答案 SO

  1. 与其自己获取资源路径并在其上装订子路径,不如让捆绑软件为您提供正确的路径
  2. 根本不需要处理路径,而是要求捆绑软件为您提供正确的 URL。(需要 Mac OS X 10.6 或更高版本。)

如果这没有帮助,那么您可以将您的代码放在某个地方以便我们尝试调试它吗?

于 2012-09-08T11:01:56.483 回答
0

对于 WKWebView(现在不推荐使用 WebView),从 MacApp 包中加载自定义字体,如下所示:

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

与 iOS 不同的是,需要为 bundle 资源提供所有内容:[[NSBundle mainBundle] bundlePath](iOS Bundle 更扁平),对于 MacApps,资源的路径更加复杂,单独使用 bundlePath 将不起作用。上述方法确实有效。

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

@font-face {font-family:'myfont';src:url('myfont.ttf');}
于 2019-12-28T18:24:14.603 回答