当前位置: 首页 > 面试题库 >

告诉屏幕阅读器在Backbone / Angular单页应用程序中页面已更改

贺飞
2023-03-14
问题内容

假设您有一个简单的单页应用程序-无论它是使用Backbone,Angular,Ember还是其他任何方式编写的。

遵循路线时,如何告诉屏幕阅读器我们已经更改了“页面”?

在经典应用程序中,当我导航/index.html/about.html屏幕阅读器时,显然可以检测到页面更改,然后按预期进行重新阅读。

但是,在我的Backbone应用程序中,当我遵循一条路线时,无法确定如何触发“重新读取”​​。我已尝试触发focus某个在某处看到的事件,但这似乎不起作用。

注意:我目前正在测试NVDA / Chrome。


问题答案:

总的来说,您不必触发“重新读取”​​,并且取决于您的UI,这可能并不是一件好事。

我的经验是使用angular.js(作为可访问性人员而不是开发人员),而我们的总体方法是管理焦点而不是触发重新阅读。(我们进行了大量的辅助功能测试。)

从UI的角度来看(主要是针对屏幕阅读器用户),关键是选择链接(例如about.html)可以将您带到某个地方。

在这种情况下,放置焦点的适当位置将是about’page’内容区域的顶部,希望是<h1>

为了tabindex使它起作用,目标元素应该通过脚本可聚焦,因此可能需要,除非它是链接或表单控件:

<h1 id="test" tabindex="-1">

-1意味着它 不是 按默认选项卡顺序排列的,而是可以通过脚本聚焦的。在WAI-
ARIA创作实践中
查看更多内容。

然后,在加载新内容(包括tabindex属性)的函数末尾,添加以下内容:

$('#test').attr('tabindex', '-1').css('outline', 'none');
$('#test').focus();

tabindex动态添加时,最好在focus()函数前一行添加,否则可能无法正常工作(我记得通过JAWS进行测试)。

为了测试这一点,我将使用以下任一方法:

  • NVDA和Firefox,Windows
  • 下颌和IE,Windows

在Safari / OSX上使用VoiceOver进行测试也是很好的,但是它的工作方式不同,可能不会遇到与基于Windows的屏幕阅读器相同的问题。

Chrome /
NVDA会给您带来很多问题,因为对它的支持不太好,最终用户不太可能使用它。IE可以使用NVDA,但是Firefox最好。

总体而言,值得了解WAI-ARIA的创作做法,尤其是在HTML中使用ARIA的做法。即使您使用的是JS应用程序,浏览器(因此也就是屏幕阅读器)都会解释生成的HTML,因此建议仍然有用。

最后,如果在 没有 用户按下空格/输入键来激活某些内容的 情况下 更新页面内容,您可能会发现JAWS /
NVDA不知道新内容,因为其“虚拟缓冲区”尚未更新。在这种情况下,您可能需要添加JS填充程序以使其更新,但只有在测试中遇到问题时才这样做,它不应该是一个全局补丁。



 类似资料:
  • 概况 背景 看到项目上的移动框架,网上寻找了一下,发现原来这些一开始都有。于是,找了个示例开始构建一个移动平台的CMS——墨颀 CMS,方便项目深入理解的同时,也可以自己维护一个CMS系统。 Showcase GitHub: http://github.com/phodal/moqi.mobi Demo: 墨颀 CMS jQuery + Backbone + UnderScore + Requir

  • 问题内容: 在完全基于服务器端的呈现(非Web 2.0)中,部署服务器端代码将在页面重新加载时直接更新客户端页面。相比之下,在基于React的Single Page Application中,即使在更新React组件之后,仍然会有一些客户端使用这些组件的旧版本(它们仅在重新加载浏览器时才获得新版本,这种情况很少发生)->如果页面如果是完全SPA,则某些客户端可能会在几个小时后才刷新页面。 应采用什

  • 在完全基于服务器端的呈现(非Web 2.0)中,部署服务器端代码将在页面重新加载时直接更新客户端页面。相反,在基于React的单页应用程序中,即使在React组件更新后,仍然会有一些客户机使用旧版本的组件(他们只在浏览器重新加载时获得新版本,这应该很少发生)->如果页面是完全SPA,一些客户机可能在几个小时后才刷新页面。 应该使用什么技术来确保旧的组件版本不再被任何客户使用?

  • 我们有一个信号页面应用程序,该应用程序已安装并处于活动状态。 现在我们的服务器重建应用程序,服务工作者文件正在服务器端更新。 我们的客户不知道这个新的服务人员文件,它仍然在使用旧的服务人员文件。 当它工作?如果我刷新/重新加载应用程序,新的服务工作人员正在安装。 如果服务器上的服务工作者文件正在更新,而客户端没有重新加载,我们如何刷新客户端? 可能的解决方案:我想,我需要在1小时后或其他时间进行投

  • 问题内容: 今天在这里提出了一个问题,我没有明显的答案。 假设我们串联并缩小所有资源文件(CSS和Javascript),并在“母版页”中声明它们。 在多页应用程序上,如果CSS文件发生更改,它将在下一次整页加载时重新充电。 在单页应用程序上,用户可以继续工作数天,并且永远不会为声明CSS文件的主页充值。在发出Ctrl-F5之前,用户永远看不到更改。 我确定有人已经想到了这一点,并且有经验可以分享

  • 我需要你的帮助:我必须读卡与RFID阅读器,在我的java应用程序。最后,当我点击按钮“Attributer Numéro RFID”时,它会读取我的RFID阅读器(型号:OCS ACRurw),然后将十六进制值插入jtextfield文本区域。(一开始,jTable会得到我数据库中每个用户的姓和名。这是我项目的代码。如果有人知道我点击“Attributer Numéro RFID”按钮时如何读取