如何检测用户是否启用了 Mac OS 高对比度辅助功能设置?

How do I detect if a user has Mac OS high contrast accessibility settings enabled?

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

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

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


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


更多信息:

在我的上一个项目中,这是通过一点用户体验知识来处理的。我们陷入了同样的困境,但最终起作用的是用户能够手动切换一些可访问性设置,包括高对比度。我认为您不应该花太多时间来回答 "how to detect",因为在某些极端情况下,如果用户通过他们无法太多控制的设备进行交互(共享 PC、过时的设备、OS,您的努力将被绕过错误等)哎呀,一些新的监视器提供了这个内置的功能,这更难检测。

但是,没有什么比好的 ol' "Hello {user.name}, here are some settings you can toggle manually in the upper-right".

更可靠的了

编码愉快!

恐怕暂时还不行。

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

通常,最需要的用户不赞成测试是否存在辅助技术或激活辅助功能。它会带来非常真实的风险,既有好心的开发人员会破坏这些功能(可能通过撤销页面),也会让不良行为者确定某人的个人健康信息。

认为它可能会在未来出现,因为它在第 5 阶段(提案) https://drafts.csswg.org/mediaqueries-5/#prefers-contrast

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

对于 Electron,您可以使用 nativeTheme API and access the nativeTheme.shouldUseHighContrastColors 属性。

A Boolean for if the OS / Chromium currently has high-contrast mode enabled or is being instructed to show a high-constrast UI.

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

console.log(nativeTheme.shouldUseHighContrastColors);

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