因此,我目前正在尝试检查用户是否在我们的网站上使用屏幕阅读器。我想检查是否是因为我们的站点提供了一个培训模块,如果他们使用的是屏幕阅读器,我想显示一个按钮,允许他们下载该培训的可打印版本。>
这是我到目前为止尝试过的:
internal class UnsafeNativeMethods
{
public const uint SPI_GETSCREENREADER = 0x0046;
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref bool pvParam, uint fWinIni);
}
public static class ScreenReader
{
public static bool IsRunning
{
get
{
bool returnValue = false;
if (!UnsafeNativeMethods.SystemParametersInfo(UnsafeNativeMethods.SPI_GETSCREENREADER, 0, ref returnValue, 0))
{
throw new Win32Exception(Marshal.GetLastWin32Error(), "error calling SystemParametersInfo");
}
return returnValue;
}
}
}
我从以下StackOverflow线程中捕获了此代码:C# : How to detect if screen reader is running?
正如您在此线程上看到的那样,我正在使用的方法显然适用于某些方法,但是当前我在调用ScreenReader.IsRunning时始终会收到“ false”。我将ScreenReader.IsRunning值存储在ViewBag中,然后在我的视图中使用剃刀语法显示一个按钮(如果该值为true)。不太确定为什么它总是错误的。如果您使用的是Windows 10,我已经使用JAWS以及每个人的计算机上附带的讲述人进行了测试。任何帮助将非常感激。谢谢大家!
答案 0 :(得分:1)
无法检测用户是否正在运行屏幕阅读器。如果可能的话,这将为不道德的人打开一扇门,让他们能够适应残疾人的生活,或者为他们提供完全不同的“可访问”浏览器体验,而不是构建包含设计的界面。
您可以创建一个位于屏幕外但仍按Tab键顺序的按钮,并使其在获得焦点时可见。然后盲人用户可以找到它,而且有眼力的键盘用户也不会认为按钮获得焦点时会发生奇怪的事情。
答案 1 :(得分:0)
我认为您只能检查用户是否具有chrome扩展名或使用javascript在客户端上运行的扩展名。
想法:
您可以为检查用户系统创建一个exe
或bath
文件,并将有关此信息的信息发送到您的服务器。如果用户下载此文件,并且没有屏幕阅读器,则加载页面。否则,请给出有关屏幕阅读器的错误。而且,当响应来自用户计算机时,您可以使用SignalR
向用户显示内容。您可以使该文件成为必须在用户系统中工作的文件,并在用户加载页面时开始下载此文件。这不是一个好方法,但是也许您可以使用这种方法进行检查。
答案 2 :(得分:0)
HttpRequest.Browser 属性返回一个 HttpBrowserCapabilities 对象,该对象列出了发出请求的设备的功能。请记住,ASP.NET使用作为HTTP请求的一部分发送的 User-Agent 字符串来标识客户端。然后,为了填充HttpBrowserCapabilities属性,ASP.NET使用一组预安装的浏览器文件处理用户代理字符串,这些文件位于以下位置:%SystemRoot%\ Microsoft.NET \ Framework \ v4.0.30319 \ CONFIG \浏览器
还有一些第三方,它们的详细程度更高,并且可以通过检测设备信息来更新,例如51Degrees