如何在WKWebView中调整字体大小?

14

在Safari中,你可以调整字体大小。我如何在WKWebView中实现相同的效果?

3个回答

12

由Inna建议的代码以前可以工作,但从iOS10.3开始停止工作。我进行了一些研究,并发现我们需要对其进行轻微更改,只需将"%%"更改为单个"%"即可。

所以JS代码应该是:

let js = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='\(fontSize)%'"

我从苹果开发者论坛得到了这些信息。 https://forums.developer.apple.com/thread/51079


2
iOS 16:在iPhone上运行良好,但在iPad上不行! - Jekapa

6

Swift 5 解决方案:

实现 WKNavigationDelegate 并在 viewDidLoad 中:

webView.navigationDelegate = self

然后在 didFinish 方法中:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    let js = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='200%'"//dual size
    webView.evaluateJavaScript(js, completionHandler: nil)
}

这个没有起作用,现在是 Xcode 12.4 Swift 5.2。 - Đức Bùi
@ĐứcBùi 尝试更改注入的 Js。通过更改 js 可能会解决问题。 - Mehrdad
在Xcode 13.4.1中对我有效,谢谢! - Stu P.
@StuP. 很高兴认识你。 - undefined

2
假设您有一个名为fontUpdatedHeight的整数,它给出了确切的字体大小。只需创建以下字符串:
NSString *jsString = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%lu%%'",(unsigned long)fontUpdatedHeight];

执行NSString

[self.WKWebView stringByEvaluatingJavaScriptFromString:jsString];

1
这个以前运行得很好,但是从最新的Xcode(Xcode8.3.2)开始就停止工作了。有没有人遇到同样的问题?有没有办法修复它? - Yuichi Kato
我认为它没有停止。你应该再次检查你的代码吗? - Onder OZCAN
哦,真的吗?你使用的Xcode版本是什么,你的设备的iOS版本是多少?我正在使用XCode 8.3.2和iOS10.3.1。在苹果开发者论坛上也有像我这样的人(请向下滚动)https://forums.developer.apple.com/thread/51079 - Yuichi Kato
3
WKWebView没有stringByEvaluatingJavaScriptFromString:jsString方法,这个方法是UIWebView的。 - BinaryNate
它在 UIWebView 上运作得很完美,但在 WKWebView 上则不然。 不过 UIWebView 已经被弃用了。 - johnny
我认为现在是[self.webview evaluateJavaScript: completion]; - James Rochabrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接