首页 > 解决方案 > 如何让 OSX 上的 WebView(或 WKWebView)在 Mojave 中采用暗模式

问题描述

我的 Mac 应用程序中有一个嵌入式 WebView。我用它来显示 HTML 文本(从 Markdown 生成。)

我试图让它在 Mojave 中采用暗模式(类似于 NSTextView 的“开箱即用”方式。)

这可能吗 - 还是我需要手动将一些 CSS 内容插入 HTML 以专门设置颜色?

假设是后者 - 有谁知道如何以通用方式执行此操作(即让 CSS 检测它是否需要根据客户端浏览器变暗或变亮。)

提前致谢...

标签: macoscocoawebkitmacos-mojave

解决方案


当您切换到暗模式时,所有标准视图都会切换到暗模式,您无需执行任何操作。

这就是说,WKWebView 正在显示“内容”,“内容”不应该被系统更改,“内容”应该以自己的颜色显示自己。如果您显示一个网站,则系统没有理由更改颜色。

但是,如果您有一个用例将视图内容颜色更新为系统模式是有意义的,那么我想您最好的选择是检测到暗/亮模式的更改并重新加载 CSS 样式。

可以通过覆盖视图 viewDidChangeEffectiveAppearance 方法来检测更改。

- (void)    viewDidChangeEffectiveAppearance
{
    [super viewDidChangeEffectiveAppearance] ;
    NSLog(@"New appearance is %@",[self effectiveAppearance].name) ;
}

根据外观名称 (NSAppearanceNameVibrantDarkNSAppearanceNameVibrantLight),您可以加载 CSS 或其他。


推荐阅读