如何在macOS上使用WKWebView支持像Safari那样的Zoom

时间:2018-07-31 08:57:46

标签: macos wkwebview

在Safari中,用户可以使用“缩放”命令(例如Command +)来放大内容。这不仅扩大了内容(包括字体大小),而且还调整了内容以保留在窗口边距之间。

我想在macOS上使用WKWebView实现相同的功能,但是当在Web视图控件上使用loadRequest()命令时,我不知道该怎么做。

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

  • 注入诸如"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='150%'"之类的javascript。似乎Mac OS版本的WKWebView不再支持webkitTextSizeAdjust,请参见https://trac.webkit.org/changeset/145168/webkit
  • 使用magnification属性。这行得通,但是只是简单地放大(或最小化)了所有内容,而没有像Safari那样将内容调整为保持在控件宽度(视口)之间。

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

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

作为注入JavaScript的替代方法(如@elsonpeng的公认答案所述),您还可以随时调整缩放级别,如下所示(快速):

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)
}

这种方法稍微灵活一些,但比代码注入要慢一些,具体取决于加载页面的复杂程度。