所以我目前正在尝试检查用户是否在我们的网站上使用屏幕阅读器。我想检查他们是否是的原因是因为我们的网站提供了一个培训模块,如果他们使用屏幕阅读器,我想显示一个按钮,允许他们下载培训的可打印版本。
这是我到目前为止尝试过的:
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#:如何检测屏幕阅读器是否正在运行?
正如您在此线程上看到的那样,我使用的方法显然适用于某些人,但是我目前在调用ScreenReader.IsRunning时总是得到"false"。我将 ScreenReader.IsRunning 值存储在 ViewBag 中,然后在我的视图中,如果该值为 true,我使用 razor 语法显示一个按钮。不太确定为什么它总是假的。我已经使用 JAWS 以及每个人计算机上的叙述者对此进行了测试,如果您使用的是 Windows 10,我认为。任何帮助将不胜感激。谢谢大家!
无法检测用户是否正在运行屏幕阅读器。如果可能的话,它将为不道德的类型打开一扇门,让他们专注于残疾人,或者提供完全不同的"可访问"浏览器体验,而不是构建设计具有包容性的界面。
您可以创建一个放置在屏幕外但仍按 Tab 键顺序排列的按钮,并在获得焦点时使其可见。然后盲人用户可以找到它,当按钮获得焦点时,视力正常的键盘用户不会认为发生了奇怪的事情。
我认为您只能检查用户是否有chrome扩展程序或类似的东西在客户端使用javascript。
理念: 您可以为检查用户系统创建exe
或bath
文件,并将相关信息发送到服务器。如果用户下载此文件并且没有屏幕阅读器,则加载页面。否则给出有关屏幕阅读器的错误。当响应来自用户计算机时,也许您可以使用SignalR
向用户显示内容。您可以将此文件设置为用户系统中的必备工作,并在用户加载页面时开始下载此文件。这不是一个好方法,但也许你可以用这种方式检查一下。
属性返回一个HttpBrowserCapabilities对象,该对象登记发出请求的设备的功能。请记住,ASP.NET 使用作为 HTTP 请求的一部分发送的用户代理字符串来标识客户端。然后,若要填充 HttpBrowserCapabilities 属性,ASP.NET 使用一组预安装的浏览器文件处理用户代理字符串,这些文件包含在以下位置:%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\CONFIG\Browsers
HttpBrowserCapabilities Class
还有一些第三方更详细,并更新了检测设备信息,即51度。