如何在macOS上使用WKWebView支持像Safari一样的缩放功能?

问题描述 投票:4回答:1

在Safari中,用户可以通过使用Zoom命令来放大内容,比如Command +。这不仅可以放大内容,包括字体大小,还可以调整内容,使其保持在窗口边距之间。

我想在macOS上用WKWebView实现同样的功能,但我不知道如何在使用该命令时实现。loadRequest() 命令。

我尝试了以下方法,但没有成功。

  • 注入javascript,比如 "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='150%'". 似乎 webkitTextSizeAdjust 在macOS版本的WKWebView上,已经不支持了,请参见 https:/trac.webkit.orgchangeset145168webkit。.
  • 使用 magnification 属性。这样做是可行的,但这只是简单地放大(或最小化)了所有内容,而没有像Safari那样将内容调整到控制宽度(视口)之间。

请注意,我使用的是 loadRequest(),不 loadHTMLString().

macos wkwebview
1个回答
1
投票

我也遇到了同样的问题,并找到了解决办法。你需要将一个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];

0
投票

作为注入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)
}

这种方法比较灵活,但比代码注入慢一点,取决于你所加载的页面的复杂程度。

© www.soinside.com 2019 - 2024. All rights reserved.