6

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

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

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


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


更多信息:

4

3 回答 3

7

恐怕目前不可能。

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

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

虽然它可能会在未来作为第 5 阶段(提案)出现 https: //drafts.c​​sswg.org/mediaqueries-5/#prefers-contrast

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

于 2019-11-28T12:17:24.020 回答
1

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

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

快乐编码!

于 2019-11-26T10:18:29.877 回答
0

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

如果 OS / Chromium 当前启用了高对比度模式或被指示显示高对比度 UI,则为布尔值。

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

console.log(nativeTheme.shouldUseHighContrastColors);

OP 注意:我知道这并不能解决您的问题,因为您尝试在浏览器而不是电子应用程序中执行此操作,但是我认为对于希望在电子应用程序,所以我想我会添加一个答案。

于 2019-12-02T04:36:48.867 回答