我已经研究了一些JavaScript框架,比如Backbone.js和Batman.js一段时间,虽然我真的很喜欢它们,但我还有一个让我不断回头的琐事.那个问题是可访问性.
作为一名网络开发人员,我一直试图让我的网站和应用程序考虑到可访问性,特别是使用渐进增强的想法.
显而易见的是,这些新的JS框架并没有优雅地降级,所以我想知道其他开发人员对这个问题的看法以及你在做什么.在所有网站/应用程序的可访问性实际上不是一个可选的东西,因为它是许多国家的法律的一部分.
也许我只是对这个问题过于热心,而不是欣赏在可访问性方面取得了多大进展.
javascript accessibility sproutcore javascript-framework backbone.js
想象一下,你有一个简单的单页应用程序 - 无论它是使用Backbone,Angular,Ember还是其他任何东西编写的.
如果跟踪路线,你如何告诉屏幕阅读器我们改变了'页'?
在一个典型的应用程序,当我从导航/index.html到/about.html屏幕阅读器显然检测的页面变化,并重新读取,你所期望的.
然而,在我的Backbone应用程序中,当我遵循路线时,我无法确定如何触发"重新读取".我试过触发一个focus我在某个地方看过的事件,但这似乎不起作用.
注意:我目前正在使用NVDA/Chrome进行测试.
javascript accessibility backbone.js angularjs single-page-application
我希望得到一些清理,这就是在WCAG网站上使用Javascript.
我是否正确使用Javascript是好的,只要它不会阻止用户访问网站的内容或在网站上实现操作.
例如,如果一个网站需要Javascript登录到一个网站,我会认为这将破坏WCAG?
此外,如果一个网站有购买的东西,配置选项,所需的Javascript完成也会打破WCAG?
只要提醒用户页面已更新(使用ARIA),就可以使用AJAX
我的假设是Javascript应该被用来增强体验而不是依赖它,这样用户可以在没有它的情况下实现目标吗?
这些假设是否正确?
要求:在每个页面上更改屏幕阅读器必须阅读整个页面内容.
我们使用firefox + NVDA进行测试,因为角度没有"更改页面",我们尝试以下内容使其在更改状态时读取整个页面:
aria-live="assertive"
Run Code Online (Sandbox Code Playgroud)
这在很大程度上是读取我们网站中文本的变化,但它只读取它的添加内容,在我们的例子中我们有一个表被填充,ng-repeat它读取了添加的信息,但没有任何上下文(它没有说明是哪一行或列正在阅读)
另一个问题是形式,当被角度填充时,屏幕阅读器将在它们被角度填充之前读取它,这已经解决了$timeout但仍然在aria-live读取更改时它会跳过某些部分,如果我们添加aria-atomic到强制读取,我们有一些选择有多个选项,那些被阅读(所有这些,我们有超过一百个选项).这不是屏幕阅读器读取的方式,它们只读取前十个选项或单击它们时可见的选项.
请记住,如果没有任何aria-live或aria-atomic,当您以角度更改状态时,不会通知用户任何更改.
几乎放弃后我们决定可能我们的重点是错误的,我们需要让每个州都有自己的页面,所以我们使用了以下内容:
function ForceNVDARead() {
$(window).on('hashchange', function () {
location.reload();
});
}
Run Code Online (Sandbox Code Playgroud)
对于URL中的每个更改,这将强制重新加载.这很有效,一切都被正确阅读,我们几乎认为这解决了一切.除此之外导致从客户端到我们的服务器的双重请求.
有没有办法让NVDA读取像常规页面加载一样的角状态的内容,而不必强制重新加载页面?
请不要仅仅使用咏叹调角色或类似的东西,这对我们已经有了它们,我们需要应用程序在更改状态时读取所有内容.
感谢任何帮助,我们即将放弃,并在没有角度的情况下重新启动项目,因为我们无法实现可访问性要求.
在Meteor.js网站上没有正文,没有标记,我怎样才能使盲人,聋等网站可以访问?
javascript ×4
angularjs ×2
backbone.js ×2
firefox ×1
meteor ×1
nvda ×1
sproutcore ×1
wcag ×1
wcag2.0 ×1