如何检测用户是否启用了 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 辅助功能设置?
更多信息:
- prefers contrast media query 尚不可用。反正我试过了,还是不行。
- inverted colors media query 仅测试反转颜色设置。
- Apple's dev docs on color and contrast没有解决办法。
在我的上一个项目中,这是通过一点用户体验知识来处理的。我们陷入了同样的困境,但最终起作用的是用户能够手动切换一些可访问性设置,包括高对比度。我认为您不应该花太多时间来回答 "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 注释:我知道这不能解决你的问题,因为你试图在浏览器而不是电子应用程序中执行此操作,但我认为这个问题可能会出现在 希望在电子应用程序中添加此功能的人的搜索结果中,所以我想我会添加一个答案。
我有一个 React/TypeScript 项目,我正在尝试检测用户是否启用了 Mac OS 的任何高对比度辅助功能设置:反转颜色、使用灰度, 无色区分, 增加对比度, 或增加显示对比度设置。
我想使用 JavaScript/TypeScript 检测这些。
到目前为止,我只能检测到
如何检测用户是否启用了任何其他 Mac OS 辅助功能设置?
更多信息:
- prefers contrast media query 尚不可用。反正我试过了,还是不行。
- inverted colors media query 仅测试反转颜色设置。
- Apple's dev docs on color and contrast没有解决办法。
在我的上一个项目中,这是通过一点用户体验知识来处理的。我们陷入了同样的困境,但最终起作用的是用户能够手动切换一些可访问性设置,包括高对比度。我认为您不应该花太多时间来回答 "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 注释:我知道这不能解决你的问题,因为你试图在浏览器而不是电子应用程序中执行此操作,但我认为这个问题可能会出现在 希望在电子应用程序中添加此功能的人的搜索结果中,所以我想我会添加一个答案。