Transparent background WKWebView (NSView)

后端 未结 5 1633
野性不改
野性不改 2021-02-08 12:27

I am building a Mac application using Swift. Therefor, I want to make a WKWebView transparent, so it shows the text of the loaded HTML, but the background of my underlaying NSWi

5条回答
  •  渐次进展
    2021-02-08 12:56

    I used this for macOS 10.12. without problems in OjbC:

    [self.webView setValue:@YES forKey:@"drawsTransparentBackground"];
    

    Under macOS 10.13.+ I got the following console warning message:

    -[WKWebView _setDrawsTransparentBackground:] is deprecated and should not be used

    The ONLY working solution was:

    [self.webView setValue:@(NO) forKey:@"drawsBackground"];
    

    I tried the below in many scenarios and it didn't work:

    • give the webView and the enclosingScrollView a layer and edit it's properties (backgroundColor, isOpaque)
    • give the webView and the enclosingScrollView a clear background color
    • inject javascript without the setValue forKey: in the webview.

    Additionally I did use:

    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
    {
        if (self.isWebviewsBackgroundTransparent) {
            [self insertTransparentBackgroundTo:webView];
        }
    }
    
    - (void)insertTransparentBackgroundTo:(WKWebView *)webView
    {
        NSString *transparentBackgroundJSSString = @"document.body.style = document.body.style.cssText + \";background: transparent !important;\";";
        [webView evaluateJavaScript:transparentBackgroundJSSString completionHandler:nil];
    }
    

提交回复
热议问题