代码之家  ›  专栏  ›  技术社区  ›  Ely

如何在macOS上使用WKWebView支持类似缩放的Safari

  •  2
  • Ely  · 技术社区  · 6 年前

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

    我想在macOS上用WKWebView实现相同的功能,但是我不知道在使用 loadRequest() web视图控件上的命令。

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

    • "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='150%'" . 看来 webkitTextSizeAdjust WKWebView的macOS版本不再支持,请参阅 https://trac.webkit.org/changeset/145168/webkit .
    • 使用 magnification 财产。这是可行的,但这只是放大(或最小化)所有内容,而没有像Safari那样调整内容以保持在控件宽度(viewport)之间。

    加载请求() ,不是 loadHTMLString()

    0 回复  |  直到 6 年前
        1
  •  1
  •   Jeremy Caney NotSoImportant    4 年前

    我遇到了同样的问题,找到了解决办法。您需要将JavaScript代码注入设置为 WkWebView

    完整代码如下:

    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];
    
        2
  •  0
  •   Ely    4 年前

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

    这种方法更灵活一些,但比代码注入慢一些,这取决于加载的页面的复杂性。