在Safari中,用户可以通过使用Zoom命令来放大内容,比如Command +。这不仅可以放大内容,包括字体大小,还可以调整内容,使其保持在窗口边距之间。
我想在macOS上用WKWebView实现同样的功能,但我不知道如何在使用该命令时实现。loadRequest()
命令。
我尝试了以下方法,但没有成功。
"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='150%'"
. 似乎 webkitTextSizeAdjust
在macOS版本的WKWebView上,已经不支持了,请参见 https:/trac.webkit.orgchangeset145168webkit。.magnification
属性。这样做是可行的,但这只是简单地放大(或最小化)了所有内容,而没有像Safari那样将内容调整到控制宽度(视口)之间。请注意,我使用的是 loadRequest()
,不 loadHTMLString()
.
我也遇到了同样的问题,并找到了解决办法。你需要将一个JavaScript代码注入到 WkWebView
配置。需要在JavaScript代码中设置比例数。
完整的代码如下所示。
NSString *jScript = @"document.body.style.zoom = 0.8";
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
[wkUController addUserScript:wkUScript];
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = wkUController;
WKWebView *webContentView = [[WKWebView alloc] initWithFrame:NSMakeRect(0, 0,sizeWidth, sizeHeight) configuration:configuration];
作为注入javascript的替代方法,如@elsonpeng的公认答案中所述,你也可以像这样随时调整缩放级别(Swift)。
webView.evaluateJavaScript("document.body.style.zoom = 1.5", completionHandler: nil)
当然,这也可以结合使用 WKNavigationDelegate
,在页面完全加载时执行脚本。
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.body.style.zoom = 1.5", completionHandler: nil)
}
这种方法比较灵活,但比代码注入慢一点,取决于你所加载的页面的复杂程度。