如何检测浏览器是不是支持暗模式

     2023-03-06     50

关键词:

【中文标题】如何检测浏览器是不是支持暗模式【英文标题】:How to detect if a browser supports dark mode如何检测浏览器是否支持暗模式 【发布时间】:2021-12-25 14:34:39 【问题描述】:

我们可以使用prefers-color-scheme: dark 来检测是否激活了暗模式:

const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;

有没有办法检测浏览器是否支持暗模式? (“支持暗模式”是指浏览器自动更改网页的默认背景/文本颜色)。

在 CSS 中,我们可以强制使用暗模式

color-scheme: dark;

但是,某些浏览器(Android 版 Firefox)会忽略它。因此,如果深色模式不可用,我想隐藏主题选择。

【问题讨论】:

不确定是否检测,但您可以在这里轻松快速查看caniuse.com/?search=color%20scheme 何时可用是什么意思?,暗模式是您添加到网站的东西。如果您想检测浏览器是否可以检测到操作系统模式,请按照您在问题中提到的操作。有什么我想念的吗? @MohamedAbdallah 我们可以使用 color-scheme: dark; 在 CSS 中强制使用暗模式,但并非所有浏览器都会切换到暗模式(即 Android Firefox)。 您可以尝试基于 CSS 的@supports (color-scheme: dark) ... 进行检测。 @connexo 很有趣。任何想法为什么在使用任何字符串而不是 dark 时它是“真实的”?例如@supports (color-scheme: blahblahblah) background-color: red; 【参考方案1】:

我目前的解决方案是在暗模式和亮模式之间切换,并检查模式之间的默认颜色是否发生了变化:

const hasDarkMode = function()

  const el = document.createElement("div");
  el.style.display = "none";
  document.body.appendChild(el);
  let color;
  /*canvastext - doesn't work in Samsung Internet, initial/unset - doesn't work in Firefox*/
  for(let i = 0, c = ["canvastext", "initial", "unset"]; i < c.length; i++ )
  
    el.style.color = c[i];
    el.style.colorScheme = "dark";
    color = getComputedStyle(el).color;
    el.style.colorScheme = "light";
    color = color != getComputedStyle(el).color;
    if (color)
      break;
  
  document.body.removeChild(el);
  return color;
();

console.log("Dark mode supported:", hasDarkMode);

这可能不是最优雅的解决方案,但它似乎有效。

通过@connexo 的评论,我们还可以测试:

const hasDarkMode = CSS.supports("color-scheme", "dark");

console.log("Dark mode supported:", hasDarkMode);
@supports (color-scheme: dark)

  .no-dark-mode
  
    display: none;
  
&lt;div&gt;Dark mode is &lt;span class="no-dark-mode"&gt;not &lt;/span&gt;available&lt;/div&gt;

【讨论】:

为什么你更喜欢const hasDarkMode = function() 而不是function hasDarkMode () 因为它不需要执行多次。

iPad 检测用户是不是启用了暗模式,但不支持暗模式

】iPad检测用户是不是启用了暗模式,但不支持暗模式【英文标题】:iPaddetectiftheuserhasDarkModeenabled,withoutsupportingDarkModeiPad检测用户是否启用了暗模式,但不支持暗模式【发布时间】:2020-05-0117:30:45【问题描述】:我正在开发一款i... 查看详情

(PHP) 如何检测用户的计算机/浏览器处于暗模式?

】(PHP)如何检测用户的计算机/浏览器处于暗模式?【英文标题】:(PHP)Howtodetectthatuser\'scomputer/browserisinDarkMode?【发布时间】:2019-02-2214:28:27【问题描述】:最近我正在更新我的软件以支持暗模式,以响应研究表明,看着纸白背景... 查看详情

如何检测 OS X 是不是处于暗模式?

】如何检测OSX是不是处于暗模式?【英文标题】:HowtodetectifOSXisindarkmode?如何检测OSX是否处于暗模式?【发布时间】:2014-10-0203:28:21【问题描述】:我的cocoa应用在新的OSX“黑暗模式”下运行时必须改变其行为。有没有办法检测OS... 查看详情

如何在三星互联网浏览器上检测暗模式?

】如何在三星互联网浏览器上检测暗模式?【英文标题】:HowtodetectdarkmodeonSamsungInternetbrowser?【发布时间】:2020-02-2700:21:14【问题描述】:如果可以检测到-是否有可能通过CSS类或JavaScript影响颜色?使用深色阅读器扩展,还可以... 查看详情

如何在 macOS 10.14 上检测暗模式?

】如何在macOS10.14上检测暗模式?【英文标题】:HowcandarkmodebedetectedonmacOS10.14?【发布时间】:2019-01-1107:37:20【问题描述】:在macOS10.14中,用户可以选择采用系统范围的浅色或深色外观,我需要根据当前模式手动调整一些颜色。【... 查看详情

如何检测浏览器是不是支持鼠标悬停事件?

】如何检测浏览器是不是支持鼠标悬停事件?【英文标题】:HowdoIdetectwhetherabrowsersupportsmouseoverevents?如何检测浏览器是否支持鼠标悬停事件?【发布时间】:2011-06-0607:39:27【问题描述】:假设我有一个网页,它有一些onmouseoverjava... 查看详情

启用浏览器的强制暗标志时如何使 Google Docs 进入暗模式?

】启用浏览器的强制暗标志时如何使GoogleDocs进入暗模式?【英文标题】:HowtogetGoogleDocsintodarkmodewhenthebrowser\'sforceddarkflagisenabled?【发布时间】:2022-01-1302:14:57【问题描述】:我一直在使用#enable-force-dark标志(在MicrosoftEdge的edge://f... 查看详情

如何(功能)检测浏览器是不是支持 WebM alpha 透明度?

】如何(功能)检测浏览器是不是支持WebMalpha透明度?【英文标题】:Howto(feature)detectifbrowsersupportsWebMalphatransparency?如何(功能)检测浏览器是否支持WebMalpha透明度?【发布时间】:2015-06-0714:56:01【问题描述】:我正在集成具有A... 查看详情

React Native - Expo - 如何检查是不是启用了暗模式?

】ReactNative-Expo-如何检查是不是启用了暗模式?【英文标题】:ReactNative-Expo-HowtocheckifDarkmodeisenabled?ReactNative-Expo-如何检查是否启用了暗模式?【发布时间】:2021-11-0608:57:36【问题描述】:我已阅读Expo/RN文档,为了获得系统颜色... 查看详情

如何检测是不是支持 HTML5 自动播放属性?

...布时间】:2011-10-3013:06:33【问题描述】:如何最好地检测浏览器的HTML5视频元素是否支持自动播放?在当前的iOSSafari上,例如,autoplayisdisabled。更新:我现在将网页设计为无论是否支持自动播放 查看详情

如何在暗模式切换中使用 localStorage?

...之间切换,并且效果很好,但是当我添加local.storage时,浏览器不会保存模式首选项。我该怎么做?HTML:<buttonid="darkmode"ty 查看详情

在miui(小米)中检测暗模式

】在miui(小米)中检测暗模式【英文标题】:Detectdarkmodeinmiui(xiaomi)【发布时间】:2021-04-0610:43:04【问题描述】:我看到了很多关于在堆栈溢出时检测暗模式的问题,例如thisone,并访问了许多中型博客,例如Howtoknowwhenyou’reusingd... 查看详情

暗模式切换 - 两个按钮 - 只有一个有效

...,希望你能帮助我:)基本上我已经创建了一个脚本来检测浏览器的暗模式并相应地显示网页。此外,应该可以借助按钮在明暗模式之间切换。整个事情都很好,但我想在我的网站上的两个地方集成这个按钮。但只有其中一个有效... 查看详情

检测本地浏览器是不是支持 ICE 涓流

】检测本地浏览器是不是支持ICE涓流【英文标题】:DetectwhetherlocalbrowsersupportsICEtrickle检测本地浏览器是否支持ICE涓流【发布时间】:2017-08-0610:44:47【问题描述】:为了支持任意客户端的ICE-trickling,建议信令机制也支持信令以支... 查看详情

检测浏览器是不是支持WebP格式? (服务器端)

】检测浏览器是不是支持WebP格式?(服务器端)【英文标题】:DetectifbrowsersupportsWebPformat?(serverside)检测浏览器是否支持WebP格式?(服务器端)【发布时间】:2013-08-1209:52:45【问题描述】:已经有一个关于DetectingWebPsupport使用客... 查看详情

如何使用我的应用程序中使用的自定义颜色轻松支持明暗模式?

】如何使用我的应用程序中使用的自定义颜色轻松支持明暗模式?【英文标题】:HowdoIeasilysupportlightanddarkmodewithacustomcolorusedinmyapp?【发布时间】:2019-10-2213:39:31【问题描述】:假设我的应用中有自定义颜色:extensionUIColorstaticvarmy... 查看详情

客户端检测

1.能力检测 //能力检测的目标不是识别浏览器,而是识别浏览器的能力。它对于想知道某个特性是否会按照适当方式行事(而不仅仅是某个特性存在)非常有用。 //采用这种方式不必顾忌特定的浏览器如何如何,只要确定浏览... 查看详情

在真实设备上的 XCUI 测试中检测暗模式

】在真实设备上的XCUI测试中检测暗模式【英文标题】:DetectdarkmodeinXCUItestonrealdevices【发布时间】:2021-01-1213:01:13【问题描述】:我正在尝试寻找一种方法来检测手机是否在XCUI测试中处于暗模式。到目前为止,我得到了这个:pri... 查看详情