透明背景WKWebView(NSView)

dan*_*ele 10 macos appkit swift

我正在使用Swift构建Mac应用程序.因此,我想让WKWebView透明,因此它显示了加载的HTML的文本,但我的底层NSWindow的背景是可见的.我试过了

webView.layer?.backgroundColor = NSColor.clearColor().CGColor;
Run Code Online (Sandbox Code Playgroud)

没有任何影响.WKWebView继承自NSView,但我不知道这是否有帮助.

另一个解决方案是插入一个NSVisualEffectView作为WebView的背景,但我不知道如何实现它!

Ada*_*lla 8

它不受支持,然后他们修复它:

https://bugs.webkit.org/show_bug.cgi?id=134779

使其透明的方法是:

myWebView.opaque = false
Run Code Online (Sandbox Code Playgroud)

  • NSView仅具有只读的“ isOpaque”,因此不起作用。这仅适用于iOS。 (3认同)

kis*_*eno 5

下面的代码对我来说非常合适,默认情况下颜色也设置为clearColor.

[wkWebView setValue:YES forKey:@"drawsTransparentBackground"];
Run Code Online (Sandbox Code Playgroud)


Ely*_*Ely 5

在macOS 10.12及更高版本中使用此命令:

webView.setValue(false, forKey: "drawsBackground")
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为它是唯一一个(在 Swift 中)在 10.15.4 上为我工作的答案。 (2认同)

Dar*_*der 5

我在 macOS 10.12 上使用了这个。OjbC 中没有问题:

[self.webView setValue:@YES forKey:@"drawsTransparentBackground"];
Run Code Online (Sandbox Code Playgroud)

在 macOS 10.13.+ 下,我收到以下控制台警告消息:

-[WKWebView _setDrawsTransparentBackground:] 已弃用,不应使用

唯一有效的解决方案是:

[self.webView setValue:@(NO) forKey:@"drawsBackground"];
Run Code Online (Sandbox Code Playgroud)

我在很多情况下尝试了以下方法,但没有成功:

  • 给 webView 和 enclusionScrollView 一个图层并编辑它的属性(backgroundColor、isOpaque)
  • 给 webView 和 enclusionScrollView 一个清晰的背景色
  • 在 web 视图中注入没有 setValue forKey: 的 javascript。

另外我确实使用了:

- (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];
}
Run Code Online (Sandbox Code Playgroud)