2008-11-05 270 views
21

作为一名网络开发人员,我工作的一些项目属于政府的雨伞,因此受到508 Accessibility法律的约束,并且有时需要遵循W3C accessibility指导原则。 JavaScript能够在多大程度上满足这些要求?Javascript和辅助功能

沿着这些路线,JavaScript,特别是AJAX和使用jQuery等软件包来执行诸如显示模式对话,弹出窗口等等现代辅助功能软件(如JAWS,Orca等)所支持的软件?过去,这条规则就像“如果它在Lynx中不起作用,它不适用于屏幕阅读器。”这是否仍然如此,还是在这些领域取得了更多进展?

编辑:共识似乎是JavaScript是好的,只要有非JavaScript的回退,但它仍然似乎不确定在屏幕阅读器软件的AJAX的支持。如果任何人有具体的经验,这将是最有帮助的。

回答

14

如果可访问性是你最关心的,始终启动一个网站!运用符合标准(选择文档类型定义并坚持)HTML。如果它是一个Web应用程序(表单提交等),请确保表单将使用HTTP GET和POST。一旦你有一个完整的网站/应用程序,只要网站仍然可以正常工作,就可以添加一些CSS和JavaScript。

这里最重要的概念是Progressive Enhancement。您正在使用CSS/JavaScript添加额外的铃声和哨音,但是您的网站/应用程序将运行得很好而不是

一个伟大的工具,用于测试508,WAI,CSS关闭,JavaScript关闭尝试使用Firefox的Web Developer插件。

2

我认为答案真的在于你如何架构事物。 JQuery有能力不显眼,因此可以访问。诀窍是在你的AJAX调用中有冗余,这样没有JavaScript的浏览器仍然可以使用你的服务。换句话说,只要你有JavaScript响应,对话等,你需要有一个相当的退化。

如果您具有可访问性并且正在为两种用例(JavaScript与非JavaScript)进行正确测试,那么您应该能够编写满足这两种受众的应用程序。

例($(文件)。就绪呼叫省略清晰和简洁:

<script> 
    $("#hello").click(function(){ 
    alert("Hi"); 
    }); 
</script> 
<a href="/say_hello.htm" id="hello">Say Hello</a> 

一个简单的例子,但基本上如果JavaScript的支持,这将仅分析点击JavaScript事件,否则将执行像一个正常的链接,然后转到say_hello.htm - 你的工作作为开发商,以确保这两个结果都为妥善处理

希望帮助

+0

你的观点是有效的,但是这个示例脚本实际上会失败,因为它试图在元素存在之前分配事件处理程序。 – 2008-11-05 21:55:11

2

渐进式增强当然是一种途径,但不显眼的性能并不是所有的JavaScript可访问性,因为屏幕阅读器倾向于使用浏览器作为其工作的基础。由于这些浏览器支持JavaScript,因此页面上的脚本仍将运行。这是AJAX特有的问题,因为点击页面的一部分可能会改变屏幕阅读器不知道的页面的另一部分。

随着AJAX的成熟,但是,使其可访问的方法正在出现。查看WAI-ARIA以了解使AJAX可访问的现代方法,以及Google's AxsJAX为实现它的好方法。


0

JQuery的必须是不显眼的,因此访问的能力。诀窍是在你的AJAX调用中有冗余,这样没有JavaScript的浏览器仍然可以使用你的服务。换句话说,只要你有JavaScript响应,对话等,你需要有一个相当的退化。

重做代码的一种方法是让你的“简单”页面调用一个可以自己调用的“函数”(或者你用于服务器端逻辑的任何东西),返回JSON或XML 。

例如: /static/myform.asp(在服务器端,“包括”相同的逻辑/ajax/myform.asp) 那你会用ASP作为Django的模板的方式。

当然,使用全功能的钟形和哨子框架,您可以更容易(在django中为同一个视图创建一个html和一个xml'模板'),但同样的想法也适用。

完成此操作后,使用jQuery迭代遍历文档中的所有锚,并使用锚的自己的链接添加onclick事件,remplacing/static/ajax /可以使您的生活更轻松。

任何人都可以认为这是一个负担太多的原因?想知道这个“设计理念”是否存在严重缺陷。

2

你也可以看看FlashAid,虽然它远没有一个完美的解决方案。 (但是,如果您使用渐进式增强功能,并且仅在Flash存在并且用户没有使用可访问性API时使用AJAX,则可能对Windows有合理的解决方案。)

长期来说,WAI- ARIA是解决方案。它在JAWS 10(测试版)和Firevox中得到了某种程度的支持,但对今天的所有用户来说,这当然是不够的。