我正在努力改善我的Delphi应用程序对视障用户的可访问性.我的应用程序使用许多自定义GUI组件 他们大多来自TWinControl或TGraphicControl.
使用NVDA进行测试时,我的自定义组件似乎不可见.例如,当鼠标悬停在常规Delphi VCL控件(如按钮或表单)上时,NVDA将通过读取控件的名称(或其他详细信息)来做出响应.相比之下,当我将鼠标悬停在任何自定义控件上时,NVDA根本没有响应.
如何使我的自定义组件对NVDA和其他屏幕阅读软件可见?
当出现带有进度条的对话框时,我需要使用NVDA屏幕阅读器来阅读一些消息.
在进度条的持续时间为0%时,我需要宣布: "您收到了定时消息"
进度条的持续时间为100%: "消息已过期"
使用的进度条是md-progress-linear.
html代码如下所示:
<md-dialog>
<md-progress-linear tabindex="0" ng-if="displayProgressIndicator || timeoutValue > 0" md-mode="determinate" class="promptProgressBar" value="{{progressValue}}"></md-progress-linear>
<md-content class="md-title dialogTitle">
{{messageTitle}}
</md-content>
<md-content class="md-dialog-content">
{{messageText}}
</md-content>
<div class="md-dialog-actions">
<md-button ng-style="theme.SecondaryButton" ng-click="OnClose()" class="md-primary right">
{{primaryActionText}}
</md-button>
<md-button ng-style="theme.SecondaryButton" ng-if="secondaryActionText.length > 0" ng-click="OnCancel()" class="md-primary right">
{{secondaryActionText}}
</md-button>
</div>
</md-dialog>
Run Code Online (Sandbox Code Playgroud)
我看到一些滑块的工作示例,它使用aria-valuetext属性,NVDA正确读取这些文本.
我尝试在md-progress-linear元素中添加aria-valuetext属性,但不起作用.
当消息到达时,NVDA会发出蜂鸣声,但不会读取aria-valuetext.
有什么想法怎么做?
我们正在我们现有的 Web 应用程序上实现可访问性。我们使用 Firefox 和 NVDA。关于我们的 Web 应用程序的小介绍:我们的 Web 应用程序是具有多个步骤的表单(第 1 步、第 2 步:这些是不同的网页)。每个步骤都有一个上一个/下一个超链接,可以转到上一个或下一个步骤。在最后一步,用户会看到他们的输入并可以提交表单或返回更改值。当用户转到上一页以更改某些值时,我们会放置一个 #anchor 以便页面转到该锚点。然后,在 Jquery 中,我将焦点放在该锚点之后的第一个可聚焦元素上。
这很好用,除非 NVDA 处于活动状态:
当 NVDA 处于活动状态时,NVDA 会强制将焦点放在用户上次访问此页面时上次使用的 HTML 元素上。就我而言,NVDA 将重点放在 Next 超链接上。NVDA 覆盖了我在 $(document).ready() 函数中设置的焦点。
我试图更改 NVDA 中的几乎所有设置,但还没有找到可以解决我的问题的设置。
我已经在网络上搜索了任何我可以设置的 ARIA 属性来告诉 NVDA 我将管理焦点和导航,但我没有在那里找到任何东西。
有谁知道如何解决这个问题?
非常感谢!
电话号码通常都是数字,忽略了parens,破折号,加号等,因此电话号码的输入字段通常是数字.
当屏幕阅读器遇到数字输入字段时,它会将值读作整数.例如,如果我有一个美国电话号码的三个输入字段,第一个是区号(3位数),那么交换(3位数),然后是行(4位数),如果字段有123,456 ,7890(分别),我们通常认为这个数字是"一二三","四五六","七,八,九,零"的方式.
但是当屏幕阅读器遇到那些领域时,它会说"一百二十三","四百五十六","七千八百九十".
我认为屏幕阅读器用户习惯于将电话号码视为大数字(至少是我曾经说过的那些人),但这并不意味着我们无法让它变得更好.如果我向其中一个人询问他们的电话号码,他们就不会使用大数字而是使用个别数字.
我尝试了各种<input>类型,并查看了所有角色,状态和属性,但没有看到内置任何可以强制读取数字的内容.
我所能想到的是通过将视觉上隐藏的<span>包含数字作为单独的数字,<span id ='foo'> 1 2 3 </ span>,然后使用<input aria-labelledby =来编码它'富'>.
有没有更好的办法?
accessibility screen-readers voiceover nvda jaws-screen-reader
我正在尝试获取一个vue组件,以便在我的网站上发生不同事件时动态地向屏幕阅读器发布信息.
我有它的工作,点击一个按钮将填充一个aria-live="assertive"和role="alert"文本的跨度.这在第一次正常工作,但是,单击具有类似行为的其他按钮会导致NVDA在读取新文本之前两次读取前一个文本.这似乎是在vue中发生的,但是没有使用jquery的类似设置,所以我猜它与vue呈现给DOM的方式有关.
我希望有一些方法可以解决这个问题,或者更好的方法来向用户阅读没有此问题的文本.任何帮助是极大的赞赏.
这是我在工作代码沙箱中设置的一个简单组件,用于显示我遇到的问题(导航到代码的组件/ HelloWorld.vue) - 注意:根据下面的答案,此沙箱已更改.该组件的完整代码如下:
export default {
name: "HelloWorld",
data() {
return {
ariaText: ""
};
},
methods: {
button1() {
this.ariaText = "This is a bunch of cool text to read to screen readers.";
},
button2() {
this.ariaText = "This is more cool text to read to screen readers.";
},
button3() {
this.ariaText = "This text is not cool.";
}
}
};Run Code Online (Sandbox Code Playgroud)
<template>
<div>
<button @click="button1">1</button>
<button @click="button2">2</button> …Run Code Online (Sandbox Code Playgroud)我是一名盲人 Java 开发人员。我正在接受全栈 JavaScript 培训,在 React for web 之后我们正在学习 React Native。
我想使用 Android Studio 模拟器测试代码,而不是安装在设备上。目前我无法测试我的代码,学习起来非常令人不安。
有没有解决方案可以让我在 Android Studio 模拟器窗口中使用屏幕阅读器(Windows 上的 NVDA 和 Linux 上的 orca)?因为实际上我的屏幕阅读器将模拟器窗口识别为图片,所以它无法聚焦小部件。
我想使用模拟器并使用 Android Studio 中集成的 Android 屏幕阅读器对话来测试我的代码。
我已按照此页面上的说明进行操作: https: //developer.android.com/studio/intro/accessibility
我使用 Expo 在终端上启动我的项目。我启动 Android studio 并启动 Android 模拟器。
我使用的是 NVDA,它是 32 位软件。所以我设置了 Java 8 32 位,因为它是我找到的唯一 32 位版本。我在 JRE 8 目录中使用命令行启用了 Java 访问桥,但我还安装了 Open JDK 11 64 位,这可能是一个问题。
主要问题是我无法关注 Android 模拟器窗口。
我正在研究客户网站的可访问性,并使用 JQuery/Javascript 来检测是否按下了 Enter 或空格键键盘按键,这非常有效...
$(document).addEventListener('keydown', navKeyboardHandler);
navKeyboardHandler = function(e) {
console.log('a keyboar key was pressed'); // This does work
if (e.keyCode === 13 || e.keyCode === 32) { // Keyboard Enter OR Spacebar pressed
console.log('enter or spacebar key pressed ! ! !'); // This does NOT work
}
};
Run Code Online (Sandbox Code Playgroud)
...直到我打开 NVDA 用屏幕阅读器测试键盘导航!它完全忽略了这个声明。偶尔,这会触发。就像按 10 或 20 次键盘中的一次一样。关于何时选择触发并不一致。
需要修改 IF 语句中的哪些内容才能使其正常工作?任何帮助将不胜感激。我正在 Windows 上使用 Chrome 和 Firefox 对此进行测试。
我只注意到,虽然aria-label,aria-labelledby和aria-describedby属性据说每一个元素上工作(见http://www.w3.org/TR/wai-aria/states_and_properties#aria-describedby),他们似乎只是几个要素工作喜欢a,而不是例如div或p在NVDA和JAWS中.
我创建了一个小的codepen来演示问题(使用浏览和焦点模式浏览它):
http://codepen.io/jmuheim/pen/avWbPe
例如,在NVDA的上a元素时,aria-label并aria-labelledby似乎在这两个浏览和对焦模式下工作.但aria-describedby仅在焦点模式下宣布,而不是在浏览模式下宣布.
对于input元素,没有任何属性似乎在浏览模式下工作,但所有属性都在焦点模式下工作.
对于像" p或"这样的"裸"文本元素div,没有一个属性似乎有效.
在JAWS中,它的行为非常相似,但至少对于p元素,当存在时aria-describedby,它宣布可以通过按"JAWS + alt + r"来读取描述.
我真的没有看到明确的模式,所以我想知道如何使用这些属性的屏幕阅读器的一般规则是什么?或者更好:为什么他们不按照规范提出的那样只为每个元素工作?
accessibility screen-readers wai-aria nvda jaws-screen-reader
我如何为以下生成的 SVG 添加替代文本?我只能访问html。流动的SVG在div中。这是读取 Js 函数生成的数字。
<svg class="barcode" role="img" aria-labelledby="title desc" jsbarcode-format="code39" jsbarcode-value="" jsbarcode-textmargin="0" jsbarcode-width="1" width="116px" height="140px" x="0px" y="0px" viewBox="0 0 116 140" xmlns="http://www.w3.org/2000/svg" version="1.1" style="transform: translate(0,0)"><rect x="0" y="0" width="116" height="140" style="fill:#ffffff;"></rect><g transform="translate(10, 10)" style="fill:#000000;"><rect x="0" y="0" width="1" height="100"></rect><rect x="4" y="0" width="1" height="100"></rect><rect x="6" y="0" width="3" height="100"></rect><rect x="10" y="0" width="3" height="100"></rect><rect x="14" y="0" width="1" height="100"></rect><rect x="16" y="0" width="1" height="100"></rect><rect x="18" y="0" width="1" height="100"></rect><rect x="20" y="0" width="3" height="100"></rect><rect x="24" y="0" width="1" height="100"></rect><rect x="28" y="0" width="3" height="100"></rect><rect x="32" y="0" width="3" height="100"></rect><rect x="38" y="0" …Run Code Online (Sandbox Code Playgroud) 最近,在尝试使我的网站可访问时,我偶然发现了一个奇怪的问题。在设置“跳过导航”链接的过程中,我注意到当页面最初加载时(“初始加载”,我的意思是在干净的浏览器会话中,而不是刷新\xe2\x80\x94,因为 NVDA 会跟踪最后一个焦点元素的位置,因此结果将取决于该元素)。
\n当页面加载并按下 Tab 键时,接收焦点的元素是第二个元素(正如您从下面的简化示例中看到的那样,它是站点徽标/名称(也是锚链接))。
\n当 NVDA 未运行时,问题不会出现...一切都按预期运行,无论 NVDA 运行或不运行,Firefox 都可以正常工作,但 Chrome、Edge 和 Opera 桌面中存在问题。到目前为止我还没有在任何其他浏览器上测试过它。
\n请注意,由于问题的性质,我没有包含可运行的代码片段或小提琴(因为屏幕上会有其他元素,并且正如我所说,这个问题仅在新的浏览器会话/干净页面加载时显示) .这是一些简化的代码来显示问题......
\nCSS
\nbody, html {\n margin: 0;\n}\n\n.skip-nav {\n position: absolute;\n margin: 10px 0 0 10px;\n white-space: nowrap;\n display: inline-block;\n padding: 0;\n}\n\n.skip-nav a {\n position: absolute;\n left: -1000px;\n border: 2px solid blue;\n border-radius: 2px;\n background-color: black;\n padding: 5px;\n}\n\n\n/* Move link into viewport when focused */\n.skip-nav a:focus {\n left: initial;\n}\n\nnav {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 30px;\n background-color: …Run Code Online (Sandbox Code Playgroud)