【问题标题】:How do I detect if a user has Mac OS high contrast accessibility settings enabled?如何检测用户是否启用了 Mac OS 高对比度辅助功能设置?
【发布时间】:2020-03-16 18:09:14
【问题描述】:

我有一个 React/TypeScript 项目,我正在尝试检测用户是否启用了 Mac OS 的任何高对比度辅助功能设置:反转颜色、使用灰度、不带颜色区分、增加对比度或增加显示对比度设置.

我想使用 JavaScript/TypeScript 检测这些。

到目前为止,我只能检测到Invert colors


如何检测用户是否启用了任何其他 Mac OS 辅助功能设置?


更多信息:

【问题讨论】:

  • 此处可能存在重复问题:stackoverflow.com/questions/38104388/…。也许让用户通过屏幕控制选择他们是否处于该模式?
  • @NathanielFlick,我在帖子中提到了这个问题。不幸的是,它不支持任何 Mac OS 高对比度设置,除了反转颜色。我也没有添加屏幕控制的选项。不过谢谢你的建议。 :-)
  • 真的,为什么不呢?
  • "我也没有添加屏幕控制的选项。"
  • @NathanielFlick,该设计不包含这样的控件。

标签: javascript macos safari accessibility high-contrast


【解决方案1】:

对于 Electron,您可以使用 nativeTheme API 并访问 nativeTheme.shouldUseHighContrastColors 属性。

一个布尔值,表示操作系统/Chromium 当前是否启用了高对比度模式或被指示显示高对比度 UI。

// in main process
const {nativeTheme} = require('electron');

console.log(nativeTheme.shouldUseHighContrastColors);

OP 说明:我知道这并不能解决您的问题,因为您尝试在浏览器而不是电子应用程序中执行此操作,但是我认为这个问题可能会出现在搜索结果中正在希望在电子应用程序中添加此功能的人,所以我想我会添加一个答案。

【讨论】:

  • 感谢您努力帮助 Electron 开发人员,尽管我不是其中之一。 :-)
【解决方案2】:

恐怕现在不可能。

Objective-C 中用于确定可访问性模式是否处于活动状态的功能(布尔 AXAPIEnabled(void);)自 10.9 起已被弃用,没有迹象表明有替代品。你可以在 Apple Developer 网站上看到它。通过扩展,如果该系统级别的开发人员不再具有访问权限,我预计 Web 开发人员也会受到限制(就像 AppleScript 编写者似乎没有访问权限一样)。

一般来说,最需要的用户不赞成测试是否存在辅助技术或激活辅助功能。它会带来非常真实的风险,即善意的开发人员会破坏这些功能(可能是通过取消页面转换)以及允许不良行为者确定某人的个人健康信息。

考虑到它可能会在第 5 阶段(提案)中出现 https://drafts.csswg.org/mediaqueries-5/#prefers-contrast

除此之外,我恐怕你正面临死胡同。

【讨论】:

  • 我希望你对不可能的部分是错误的。 ;-)
【解决方案3】:

在我的上一个项目中,这是通过一点 UX 知识处理的。我们进入了同一个兔子洞,但最终奏效的是用户能够手动切换一些可访问性设置,包括高对比度。我认为您不应该花太多时间回答“如何检测”,因为在某些边缘情况下,如果用户通过他们没有太多控制权的设备(共享 PC、过时的设备、操作系统错误等)进行交互,您的努力将被绕过。哎呀,一些新的监视器提供了这个更难检测到的内置功能。

但是,没有什么比“您好 {user.name},您可以在右上角手动切换的一些设置更可靠”。

编码愉快!

【讨论】:

  • @ Mike N,感谢您的回答。不幸的是,我没有制作拨动开关的选项。
  • 很遗憾,如果我还有那个项目,我会查找并提供任何可能有助于解决您问题的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多