我正在使用Swift构建Mac应用程序。因此,我想让WKWebView透明,因此它显示了加载的HTML的文本,但我的底层NSWindow的背景是可见的。 我试过了
webView.layer?.backgroundColor = NSColor.clearColor().CGColor;
没有任何影响。 WKWebView继承自NSView,但我不知道这是否有帮助。
另一个解决方案是插入一个NSVisualEffectView作为WebView的背景,但我也不知道如何实现这一点!
答案 0 :(得分:8)
答案 1 :(得分:5)
下面的代码非常适合我,默认情况下颜色也设置为clearColor。
[wkWebView setValue:YES forKey:@"drawsTransparentBackground"];
答案 2 :(得分:4)
在macOS 10.12及更高版本中使用它:
webView.setValue(false, forKey: "drawsBackground")
答案 3 :(得分:1)
我将它用于macOS 10.12。在OjbC没有问题:
[self.webView setValue:@YES forKey:@"drawsTransparentBackground"];
在macOS 10.13。+我收到以下控制台警告消息:
- [WKWebView _setDrawsTransparentBackground:]已弃用,不应使用
唯一可行的解决方案是:
[self.webView setValue:@(NO) forKey:@"drawsBackground"];
我在很多场景中都尝试过以下操作,但它没有用:
此外我确实使用过:
- (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];
}
答案 4 :(得分:1)
更新的、稍微好一点的解决方案 (2021)。在 WKWebViewConfiguration
上使用私有属性 drawsBackground。它的属性已在 macOS 10.14
中引入,因此不会消失。
//https://opensource.apple.com/source/WebKit2/WebKit2-7610.2.11.51.8/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h.auto.html
@property (nonatomic, setter=_setDrawsBackground:) BOOL _drawsBackground WK_API_AVAILABLE(macos(10.14), ios(12.0));
let configuration = WKWebViewConfiguration()
var requiresDrawBackgroundFallback = false
if #available(OSX 10.14, *) {
configuration.setValue(false, forKey: "sward".reversed() + "background".capitalized) //drawsBackground KVC hack; works but private
} else {
requiresDrawBackgroundFallback = true
}
let webView = WKWebView(frame: .zero, configuration: configuration)
if requiresDrawBackgroundFallback {
webView.setValue(false, forKey: "sward".reversed() + "background".capitalized) //drawsBackground KVC hack; works but private
}