21

作为一名 Web 开发人员,我从事的许多项目都属于政府的保护伞,因此受508 无障碍法律的约束,有时还受W3C 无障碍指南的约束。在满足这些要求的同时,JavaScript 可以在多大程度上使用?

沿着这些思路,JavaScript,特别是 AJAX 和使用 jQuery 之类的包来做诸如显示模式对话、弹出窗口等的事情在多大程度上得到了现代可访问性软件(如 JAWS、Orca 等)的支持?过去,该规则类似于“如果它在 Lynx 中不起作用,它对屏幕阅读器不起作用”。这仍然是真的,还是在这些领域取得了更大的进展?

编辑:共识似乎是只要有非 javascript 后备,javascript 就可以了,但是屏幕阅读器软件中对 AJAX 的支持似乎仍然不确定。如果有人对此有具体经验,那将是最有帮助的。

4

6 回答 6

14

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

这里最重要的概念是渐进增强。您正在使用 CSS/JavaScript 添加额外的花里胡哨,但没有任何一种,您的网站/应用程序也能正常运行。

测试508WAI、 CSS off 、 JavaScript off 的好工具尝试使用 Firefox 的Web Developer插件。

于 2008-11-05T21:53:59.570 回答
2

我认为答案实际上在于您如何构建事物。JQuery 具有不显眼的能力,因此可以访问。诀窍是在你的 AJAX 调用周围有冗余,这样没有 JavaScript 的浏览器仍然可以使用你的服务。换句话说,无论你有 JavaScript 响应、对话框等,你都需要一个降级的等价物。

如果您考虑到可访问性并且您正在对两个用例(JavaScript 与非 JavaScript)进行适当的测试,那么您应该能够编写同时满足这两种受众的应用程序。

示例 ($(document).ready 为清晰和简洁省略了调用:

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

一个简单的例子,但基本上这只会在支持 JavaScript 的情况下评估 click JavaScript 事件。否则,它将像正常链接一样执行并转到 say_hello.htm - 作为开发人员,您的工作是确保正确处理这两个结果。

希望有帮助!

于 2008-11-05T21:44:38.933 回答
2

渐进式增强当然是一种途径,但不引人注目并不是 JavaScript 可访问性的全部和终结,因为屏幕阅读器倾向于使用浏览器作为其工作的基础。由于这些浏览器支持 JavaScript,因此您页面上的脚本仍将运行。这是 AJAX 的一个特殊问题,因为单击页面的一部分可能会更改屏幕阅读器不知道的页面的另一部分。

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


于 2008-11-06T00:19:29.653 回答
2

您也可以看看 FlashAid,尽管它远非完美的解决方案。(但是,如果您使用渐进增强并且仅在 Flash 存在且用户未使用辅助功能 API 时使用 AJAX,您可能有一个合理的解决方案……适用于 Windows。)

从长远来看,WAI-ARIA 是解决方案。它在 JAWS 10(测试版)和 Firevox 中得到了一定程度的支持,但对于今天的所有用户来说肯定是不够的。

于 2008-11-25T20:59:21.227 回答
0

JQuery 具有不显眼的能力,因此可以访问。诀窍是在你的 AJAX 调用周围有冗余,这样没有 JavaScript 的浏览器仍然可以使用你的服务。换句话说,无论你有 JavaScript 响应、对话框等,你都需要一个降级的等价物。

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

例如:/static/myform.asp(在服务器端,“包含”与 /ajax/myform.asp 相同的逻辑),这样您就可以将 asp 用作 django 的模板。

当然,使用功能齐全的 bell and whistles 框架,您可以使这变得更容易(想想在 django 中为同一个视图提供一个 html 和一个 xml '模板'),但同样的想法也适用。

完成此操作后,使用 jQuery 遍历准备好的文档上的所有锚点,并使用锚点自己的链接添加 onclick 事件,替换 /static/ajax/ 可以让您的生活更轻松。

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

于 2008-11-08T18:32:20.460 回答
0

我认为接受的答案虽然在当时还不错,但现在已经过时了。(在写这个答案的时候已经有十年了。WCAG 2.1 是在几周前完成的......)

W3C WAI-Authoring Design Patterns Practices文档包括各种常见小部件的示例,这些小部件需要javaScript才能将正确的语义、状态和角色传达给辅助技术。

AJAX 可以访问,只要您在用户激活它之前小心地为屏幕阅读器提供有关页面内更新将是什么的相关语义线索。您可能还需要通知屏幕阅读器之后实际发生的变化,例如 aria-live 区域可能会宣布“已加载 20 个新项目”或其他任何内容。这是通过 javaScript 实现的。

如果您的可访问性知识停留在“渐进式增强”,并且您将上面接受的答案视为该职位的理由,那么您很可能需要更新。这些天事情进展得很快。

于 2018-08-10T10:05:19.097 回答