【问题标题】:Change font from Webview in ios在 ios 中从 Webview 更改字体
【发布时间】:2018-12-20 06:49:03
【问题描述】:

我的应用通过 Url 加载 WebView,而不是 html 字符串。 我尝试了几个选项来更改字体,但没有奏效。 我在下面使用这种方法。 请提供一些帮助,并为我糟糕的英语感到抱歉!

NSString *fontFamilyStr = @"document.getElementsByTagName('body')[0].style.fontFamily='PingFangSC-Light';";
[webView stringByEvaluatingJavaScriptFromString:fontFamilyStr];

【问题讨论】:

    标签: javascript ios objective-c uiwebview


    【解决方案1】:

    我不太确定你在哪里尝试在代码中调用 stringByEvaluatingJavaScriptFromString,你应该在 webView 完成加载后调用它,因为如果你尝试修改 UI HTML 页面(通过更改字体)甚至在网页完成加载之前运行您的 JavaScript 命令,尽管您的 JavaScript 代码运行,但它无法修改其组件的属性,因为它们可能尚未完成渲染。

    因此,

    第 1 步:

    使您的 ViewController 成为您的 webViewnavigationDelegate

    webView.navigationDelegate = self
    

    第 2 步:

    将扩展添加到您的 ViewController 并确认 WKNavigationDelegate

    extension ViewController : WKNavigationDelegate {
        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
            let changeFontFamilyScript = "document.getElementsByTagName(\'body\')[0].style.fontFamily = \"Impact,Charcoal,sans-serif\";"
            webView.evaluateJavaScript(changeFontFamilyScript) { (response, error) in
                debugPrint("Am here")
            }
        }
    }
    

    第 3 步:

    注意使用 '\' 来转义 "document.getElementsByTagName(\'body\')[0].style.fontFamily = \"Impact,Charcoal,sans-serif\";" 中的特殊字符,如单引号 (') 和双引号 ("),您在上面的代码中缺少这些字符

    第 4 步:

    如果您的网页找不到指定的 FontFamily,请确保您提供适当的 FontFamilies 和选项(查看我指定的 3 个字体名称 Impact、Charcoal、sans-serif)

    O/P

    不带 NavigationDelegate(不运行 javaScript)

    应用字体后

    希望对你有帮助

    【讨论】:

    • 我可以在 UIwebView 上使用这个方法吗? [webView stringByEvaluatingJavaScriptFromString: @"document.getElementsByTagName(\'body\')[0].style.fontFamily = \"PingFangSC-Light\";"];在我的代码中添加“\”后仍然无法正常工作。我可以更改大小和颜色,但不能更改字体。请帮忙!谢谢
    • @fritz :不,您必须将它与WKWebView 一起使用,UIWebView 已被弃用,不应进一步使用。尝试设置不同的字体系列,我相信您设置的字体不适用于 WebView。尝试使用其他字体系列来检查代码是否正常工作。我添加了工作代码的屏幕截图,所以我相信代码没有问题。它是您设置的字体系列导致问题。那是你安装的自定义字体吗?
    • 还是不行。 WKWebView 似乎不适用于 ios 11 下的设备。我将使用自定义字体。
    • @Sandeep Bhandari:它适用于英语。但我需要在自定义中文上实施。我已将 ttf 文件放入 xcode 并可以在情节提要中使用。有什么方法可以获取正确的字体名称吗?感谢您的帮助!
    • @fritz : WKWebView 默认不加载自定义应用字体,我可以给你两个解决方案。 1. 将网页下载为 HTML 字符串,然后动态插入样式以使用这些答案中提到的自定义字体(虽然不是直截了当),使用 GCDWebServer 如下所示stackoverflow.com/questions/25785179/… 2. 使用更接近所需字体系列的系统字体.
    【解决方案2】:

    在加载到 webView 之前,只需为您的字符串添加一个 <font face> 标记即可。

    NSString *body = [plist objectForKey:@"foo"];
    NSString *htmlString = 
        [NSString stringWithFormat:@"<font face='PingFangSC-Light' size='3'>%@", body];
    [webView loadHTMLString:htmlString baseURL:nil];
    

    【讨论】:

    • 我使用 url 来加载 webView。 [myWebView loadRequest:theRequest] 你能解释一下 [plist objectForKey:@"foo"] 代表什么吗
    【解决方案3】:

    让我们试试吧。它对我有用。希望它会帮助你。

    let styles = "<html><head>"
            + "<style type=\"text/css\">body{font-size:20px;font-family:Helvetica;}"
            + "</style></head>"
            + "<body>" + "</body></html>"
    
        self. webView.loadHTMLString(styles, baseURL: nil)
    

    【讨论】:

    • 我可以在加载到 webview 时同时使用 url 和 htmlString 吗?抱歉这个愚蠢的问题,我还是 ios 开发的新手。
    • 我不明白。我调用 [myWebView loadRequest:theRequest];加载网页视图。我仍然可以调用 [myWebView loadHTMLString: styles baseURL:nil]; ?感谢您的帮助。
    猜你喜欢
    • 2012-01-21
    • 2017-08-16
    • 2014-03-17
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2015-07-26
    • 2019-06-13
    • 2013-07-10
    相关资源
    最近更新 更多