当前位置: 首页 > web >正文

SAP学习笔记 - 开发33 - 前端Fiori开发 Accessibility(可访问性)

上一章讲了Content Density(内容密度),其实也就是对应不同设备。

SAP学习笔记 - 开发32 - 前端Fiori开发 Content Density(内容密度)-CSDN博客

本章继续讲Fiori开发的知识。

目录

1,Accessibility(可访问性)

1),Landmark 扩展

- 这个东西有啥用呢?

  - 对眼睛正常的人来说其实没啥大用

  - 这个主要是对视力受损,只能靠听觉的人有用

2),Overview.view.xml

3),InvoiceList.view.xml

4),HelloPanel.view.xml

5),i18n.properties

6),运行看效果

2,Landmarks 插件的用途总结

2-1. 识别网页的ARIA地标区域

2-2. 提升无障碍访问体验

2-3. 主要功能

2-4. 适用场景

2-5. 同类工具

2-6. 屏幕阅读器如何利用地标?

2-7. 地标的核心作用

2-8. 实际例子

2-9. Landmarks插件的意义

2-10. 类比解释


下面是详细内容。

1,Accessibility(可访问性)

Accessibility (简称 a11y) 在 SAP Fiori 开发中指的是确保应用程序能够被所有用户使用,包括残障人士(如视觉障碍、运动障碍等)的技术和设计实践。 

SAPUI5 SDK - Demo Kit

 

下面先看实例。

1),Landmark 扩展

Chrome浏览器上用(其他浏览器上应该也有),先安装上

这里面有些快捷键,Alt + Shift + L =》显示Popup

 

Alt+Shift+L,就显示这样的

- 这个东西有啥用呢?

  - 对眼睛正常的人来说其实没啥大用

    当然你也能用,用习惯了也蛮有用的。

  - 这个主要是对视力受损,只能靠听觉的人有用

想想你进超市找小零食,你是挨个货架找呢,还是抬头看标牌呢?对吧,这个标牌,对网页来说就是“地标“(Landmark)。

你视力OK的话,你拿鼠标就往下滑了,虽然也是“挨个货架找" 这种"笨" 方法,但是其实没办法,因为一般的网页里压根就没做“地标”,你没得选。

但是视力受损的话,就很郁闷了哈,你没法往下滑鼠标,只能挨行听,这个网页的“地标”就是给这些听力受损的人做了个可以听的“标牌”。

就好比视力受损的人进超市,手边有个地图,一摸就会有提示,“零食区在你右手边往前走,第3个货架”,你说快不快,再也不需要挨个摸货架了,直接到第3个货架就OK。

一开始没太理解这个“地标”的作用是因为它不是单独作业的,它还是要和其他读插件合作的。

摸一下,能听到摸的是啥,然后决定下一步该怎么做,这就是这个组件的用途。

2),Overview.view.xml

<mvc:ViewcontrollerName="ui5.walkthrough.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"displayBlock="true"><Page title="{i18n>homePageTitle}"><landmarkInfo><PageAccessibleLandmarkInforootRole="Region"rootLabel="{i18n>Overview_rootLabel}"contentRole="Main"contentLabel="{i18n>Overview_contentLabel}"headerRole="Banner"headerLabel="{i18n>Overview_headerLabel}"/></landmarkInfo><content><mvc:XMLView viewName="ui5.walkthrough.view.HelloPanel" /><mvc:XMLView viewName="ui5.walkthrough.view.InvoiceList" /></content></Page>
</mvc:View>

- 加上 landmarkInfo 标签项

<landmarkInfo>
    <PageAccessibleLandmarkInfo
        rootRole="Region"
        rootLabel="{i18n>Overview_rootLabel}"
        contentRole="Main"
        contentLabel="{i18n>Overview_contentLabel}"
        headerRole="Banner"
        headerLabel="{i18n>Overview_headerLabel}"/>
</landmarkInfo>

3),InvoiceList.view.xml

<mvc:View controllerName="ui5.walkthrough.controller.InvoiceList"xmlns="sap.m"xmlns:core="sap.ui.core"xmlns:mvc="sap.ui.core.mvc"><Panel accessibleRole="Region"><headerToolbar><Toolbar><Title text="{i18n>invoiceListTitle}"/><ToolbarSpacer/><SearchField width="50%" search=".onFilterInvoices"/></Toolbar></headerToolbar><Table id="invoiceList" class="sapUiResponsiveMargin" width="auto" items="{path : 'invoice>/Invoices',sorter : {path : 'ShipperName',group : true}}"><columns><Column hAlign="End" minScreenWidth="Small" demandPopin="true" width="5em"><Text text="{i18n>columnQuantity}" /></Column><Column><Text text="{i18n>columnName}" /></Column><Column minScreenWidth="Small" demandPopin="true"><Text text="{i18n>columnStatus}" /></Column><Column minScreenWidth="Tablet" demandPopin="false"><Text text="{i18n>columnSupplier}" /></Column><Column hAlign="End"><Text text="{i18n>columnPrice}" /></Column></columns><items><ColumnListItem type="Navigation" press=".onPress"><cells><ObjectNumber number="{invoice>Quantity}" emphasized="false"/><ObjectIdentifier title="{invoice>ProductName}" /><Text core:require="{Formatter: 'ui5/walkthrough/model/formatter'}" text="{parts: ['invoice>Status','i18n>invoiceStatusA','i18n>invoiceStatusB','i18n>invoiceStatusC'],formatter: 'Formatter.statusText.bind($controller)'}"/><Text text="{invoice>ShipperName}" /><ObjectNumber core:require="{Currency: 'sap/ui/model/type/Currency'}" number="{parts: ['invoice>ExtendedPrice','view>/currency'],type: 'Currency',formatOptions: {showMeasure: false}}" unit="{view>/currency}" state="{= ${invoice>ExtendedPrice} > 50 ? 'Error' : 'Success' }"/></cells></ColumnListItem></items></Table></Panel>
</mvc:View>

- 这个地方定义了一个区域,其实就是 Landmark Region,可以直接跳转到这里来

<Panel accessibleRole="Region">
    <headerToolbar>
        <Toolbar>
            <Title text="{i18n>invoiceListTitle}"/>
            <ToolbarSpacer/>
            <SearchField width="50%" search=".onFilterInvoices"/>
        </Toolbar>
    </headerToolbar>

4),HelloPanel.view.xml

<mvc:ViewcontrollerName="ui5.walkthrough.controller.HelloPanel"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"><PanelheaderText="{i18n>helloPanelTitle}"class="sapUiResponsiveMargin"width="auto"expandable="{device>/system/phone}"expanded="{= !${device>/system/phone} }"accessibleRole="Region" ><content><Buttonid="helloDialogButton"icon="sap-icon://world"text="{i18n>openDialogButtonText}"press=".onOpenDialog"class="sapUiSmallMarginEnd sapUiVisibleOnlyOnDesktop"/><Buttontext="{i18n>showHelloButtonText}"press=".onShowHello"class="myCustomButton"/><Inputvalue="{/recipient/name}"valueLiveUpdate="true"width="60%"/><FormattedTexthtmlText="Hello {/recipient/name}"class="sapUiSmallMargin sapThemeHighlight-asColor myCustomText"/></content></Panel>
</mvc:View>

- 和 InvoiceList.view.xml 里面一样,也是定义了一个可以跳转的 Landmark Region 

<Panel
    headerText="{i18n>helloPanelTitle}"
    class="sapUiResponsiveMargin"
    width="auto"
    expandable="{device>/system/phone}"
    expanded="{= !${device>/system/phone} }"
    accessibleRole="Region" >

5),i18n.properties

# App Descriptor
appTitle=Hello World
appDescription=A simple walkthrough app that explains the most important concepts of SAPUI5# Hello Panel
showHelloButtonText=Say Hello
helloMsg=Hello {0}
homePageTitle=Walkthrough
helloPanelTitle=Hello World
openDialogButtonText=Say Hello With Dialog
dialogCloseButtonText=Ok# Invoice List
invoiceListTitle=Invoices
invoiceStatusA=New
invoiceStatusB=In Progress
invoiceStatusC=DonecolumnQuantity=Quantity
columnName=Name
columnSupplier=Supplier
columnStatus=Status
columnPrice=Price# Detail Page
detailPageTitle=Walkthrough - Details
ratingConfirmation=You have rated this product with {0} stars
dateTitle=Order date
quantityTitle=Quantity
Salesperson=Sales Person# Product Rating
productRatingLabelInitial=Please rate this product
productRatingLabelIndicator=Your rating: {0} out of {1}
productRatingLabelFinal=Thank you for your rating!
productRatingButton=Rate#Overview Page
Overview_rootLabel=Overview Page
Overview_headerLabel=Header
Overview_contentLabel=Page Content
ratingTitle=Rate the Product

6),运行看效果

虽然现在是粉色的框框,但是吧,这个应该只是给开发人员看的,视力受损的用户用不到

大致的使用流程是:

- 他们会按下快捷键或其他方式打开面板,摸到某一个按钮

- 读插件读出该按钮上面的文字

- 他们根据听到的内容来具体决定是否“阅读”那部分内容

- 决定好之后,定位到具体的位置,然后再继续听那一段的文本内容

- 听完之后,再回到面板,找下一个想听的内容,直接定位,然后听一听

其实Landmark本身已经提供了相关的功能了呀,咱们这里的开发的内容有啥用呢?

你看按钮面板就知道,通过Fiori开发把内容给细化了,按钮变多了,让用户可以更加细腻的操作。

这在页面内容比较多的时候还是蛮有用的哈。

<参考:默认Landmark 会显示这样的面板>

如果你需要检查网页的无障碍支持或优化屏幕阅读器体验,Landmarks 这款插件会非常实用。

下面来总结一下Landmarks 插件的用途。

(下面是Deepseek里面查找的内容的整理)

2,Landmarks 插件的用途总结

Chrome 浏览器上的 Landmarks 插件是一款辅助 网页无障碍访问(Web Accessibility) 的工具,主要用于帮助用户(尤其是视觉障碍者或依赖屏幕阅读器的用户)快速识别和导航网页的 ARIA 地标(Landmark Roles)。以下是它的主要用途和功能:


2-1. 识别网页的ARIA地标区域

  • ARIA地标(如 <header><nav><main><footer> 等)是网页中具有特定语义的HTML5或ARIA标签,用于划分页面的逻辑结构(例如导航栏、主内容区、侧边栏等)。

  • Landmarks 插件会高亮或列出这些区域,帮助用户理解页面布局。


2-2. 提升无障碍访问体验

  • 对视障用户的帮助:依赖屏幕阅读器的用户可以通过地标快速跳转到关键区域(如跳过重复导航栏直接进入主内容)。

  • 开发者调试:前端开发者可以检查网页是否符合无障碍标准(如 WCAG),确保地标角色(role="banner"role="navigation" 等)正确使用。


2-3. 主要功能

  • 地标高亮:用不同颜色标注页面中的地标区域。

  • 地标列表:显示所有地标的类型(如 navigationmainsearch)及其数量。

  • 键盘导航支持:允许用户通过快捷键在地标间跳转。


2-4. 适用场景

  • 无障碍测试:开发者或测试人员验证网页的无障碍兼容性。

  • 教育用途:学习网页语义化和ARIA地标的实际应用。

  • 日常浏览:普通用户快速定位页面关键部分(例如直接跳转到搜索框)。


2-5. 同类工具

  • 类似插件还有 axe DevToolsWAVE Evaluation Tool 等,但 Landmarks 更专注于地标结构的可视化。

2-6. 屏幕阅读器如何利用地标?

对于视觉障碍者(尤其是依赖屏幕阅读器的用户),虽然他们无法“看见”页面布局,但地标(Landmarks)的作用类似于“听觉路标”,能帮助他们通过声音快速理解网页结构并高效导航。

  • 地标是ARIA或HTML5的语义标签,比如 <nav>(导航栏)、<main>(主内容区)、<aside>(侧边栏)等。这些标签会被屏幕阅读器(如JAWS、NVDA、VoiceOver)识别并语音提示

  • 例如
    当用户打开网页,屏幕阅读器会提示:
    “导航区域,包含6个链接”
    “主内容区,开始阅读”
    这样用户能直接跳转到关键区域,无需听完整页内容。


2-7. 地标的核心作用

  • 跳过重复内容
    网页顶部通常有导航菜单、广告等重复内容。视觉障碍者可以通过地标(如 <main>)直接跳到正文,避免反复听重复信息。

  • 快速定位功能区域
    比如通过 <search> 地标找到搜索框,或通过 <footer> 找到版权信息。

  • 明确页面结构
    地标相当于听觉上的“章节标题”,帮助用户脑补页面布局。


2-8. 实际例子

  • 没有地标的网页
    屏幕阅读器只能按顺序朗读所有HTML内容,用户可能需要听几十秒才能找到想要的信息。

  • 有地标的网页
    用户按下快捷键(如NVDA的D键),屏幕阅读器会列出所有地标,用户选择“主内容区”后直接跳转,效率提升90%。


2-9. Landmarks插件的意义

  • 对开发者:检查地标是否缺失或错误(比如漏标<main>标签)。

  • 对普通用户:直观展示地标位置,理解无障碍设计的重要性。

  • 对视觉障碍者:虽然他们看不到插件的高亮效果,但开发者通过插件优化地标后,能直接改善他们的体验。


2-10. 类比解释

想象你闭着眼走进一家超市:

  • 没有地标:你需要摸遍所有货架才能找到牛奶。

  • 有地标:店员告诉你:“饮料区在左前方第三排”,你直接走过去。

地标就是网页中给屏幕阅读器的“语音指引”。


如果网页没有地标,视觉障碍用户会像在迷宫里摸索;而合理的地标能让他们像拥有了“听觉地图”。这就是为什么ARIA地标和无障碍设计如此重要。

以上就是本篇的全部内容。

更多SAP顾问业务知识请点击下面目录链接或东京老树根的博客主页

https://blog.csdn.net/shi_ly/category_12216766.html

东京老树根-CSDN博客

http://www.xdnf.cn/news/14251.html

相关文章:

  • 10.OpenCV—联合QT界面显示
  • 【计算机网络】非阻塞IO——epoll 编程与ET模式详解——(easy)高并发网络服务器设计
  • 【python深度学习】Day53对抗生成网络
  • 安装laravel11和laravel12的一些报错问题解决
  • QDEC vs FlexPWM:RT1176编码器接口深度对比与工程实践指南
  • mysql查看表结构语句
  • 铸铁试验平台的重要性及应用前景
  • MVVM、MVP、MVC
  • MQ选型及RocketMQ架构总览
  • YOLOv3 的网络结构详解
  • Linux系统之pic详解
  • Redis集群模式之Redis Cluster(3)
  • TC3xx中PFLASH缓存对XCP标定常量的影响
  • Fast API 中的用户认证:深入理解 JWT(JSON Web Tokens)
  • 软死锁的检测--看门狗
  • JavaSE超详细笔记-网络编程篇-基于黑马
  • 数据库连接池深度研究分析报告
  • rt-thread的红外遥控开源库使用(裸机版本)记录.
  • 暑期车辆违停治理:视觉算法的实践路径
  • 【C语言】图书管理系统(文件存储版)丨源码+详解
  • 提的缺陷开发不改,测试该怎么办?
  • 《Gulp与SCSS:解构前端样式开发的底层逻辑与实战智慧》
  • QT集成Boost库
  • PyCharm 中更改缓存和插件目录
  • 【华为开发者学堂】HarmonyOS
  • 以MNIST数据集为例进行单机多卡训练(DP和DDP)
  • 每日算法刷题Day31 6.14:leetcode二分答案2道题,结束二分答案,开始枚举技巧,用时1h10min
  • 【生活系列】金刚经
  • 使用 FastMCP 实现 Word 文档与 JSON 数据互转的 Python 服务
  • PHP、Apache环境中部署sqli-labs