为什么应该测试无JavaScript的页面体验

news/2025/9/26 18:00:39/文章来源:https://www.cnblogs.com/qife122/p/19110961

为什么应该测试无JavaScript的页面

当开发者考虑无障碍设计时,讨论通常围绕屏幕阅读器、语义化HTML、颜色对比度或键盘导航。这些确实非常重要。

以下是本文将要涵盖的内容:

  • JavaScript可能失效的原因
  • 渐进增强的实践方法
  • 当页面必须依赖JavaScript时的处理方案
  • 总结

JavaScript可能失效的原因

在几乎所有网站都依赖JavaScript框架进行渲染和交互的时代,考虑"无JS"体验可能听起来"无关紧要"。但JavaScript可能因多种原因失效:

  • 缓慢或不稳定的网络:低带宽地区的移动用户可能会遇到超时或脚本加载不完整的情况
  • 浏览器扩展和拦截器:安全或隐私工具可能阻止或剥离脚本
  • 辅助技术限制:部分用户禁用JavaScript浏览,或使用阻止脚本的旧版/专用浏览器(或严格的企业/校园策略)

我们很容易假设JavaScript始终可用,但这绝非必然。如果JavaScript失效,用户将面临不必要的障碍。虽然无法总是预测失效原因,但我们可以让网站以更优雅的方式应对故障。

测试无JavaScript的网站是为了提高韧性和可访问性。

渐进增强的实践

使用JavaScript时,可能会忍不住编写这样的代码:

<span onclick="goToPage('/homepage')">Home page</span>

<span>不是链接,默认不可键盘聚焦,且在JavaScript禁用时无法工作。相反,应该使用默认即可工作的语义化HTML,仅在JS可用时进行增强:

<!-- 有无JS均可工作,并被辅助技术识别为链接 -->
<a href="/homepage" id="home-link">Home page</a><script>// 渐进增强:仅在JS加载时拦截const link = document.getElementById('home-link');link?.addEventListener('click', (e) => {// 如果使用客户端路由,取消注释以防止整页重载:// e.preventDefault();// router.push('/homepage'); // 或 history.pushState(...) 等});
</script>

这种方式下,用户默认获得真正的链接和键盘可访问性,而SPA路由(或其他增强功能)仅在脚本运行时生效。

提交按钮只有在位于具有真实action(和服务器端处理/验证)的<form>内时才能在无JS情况下工作:

<form action="/contact" method="post" novalidate><label>Message <textarea name="message" required></textarea></label><button type="submit">Send</button>
</form>

注意无JS时,内置浏览器验证可能有限——因此务必在此类情况下始终进行服务器端验证。

当页面必须依赖JavaScript

并非所有功能都能在没有JavaScript的情况下实现。复杂的Web应用可能依赖脚本才能运行。

这种情况下,可以创建简单页面告知用户页面无法正常工作的原因。

Google的无JavaScript页面就是很好的现实案例。如果在Chrome中禁用JavaScript并导航到Google,会看到页面提示用户需要开启JavaScript才能访问。

当脚本失效时,Google不是让用户面对空白页面,而是告知无法访问的原因。但请注意,Google的消息仅在JavaScript被禁用时显示。如果JS只是加载失败,<noscript>消息不会出现。

像Google这样的"无JavaScript"页面或简单的"正在加载交互式仪表板(需要JavaScript)"消息比沉默更友好。可以在<noscript>标签内包含回退消息:

<noscript><p>本页面需要JavaScript才能正常运行。请在浏览器设置中启用JavaScript。</p>
</noscript>

<noscript>有个关键限制:它仅在浏览器中禁用脚本时渲染。当脚本已启用但加载失败或运行时崩溃时(如CDN故障、CSP阻止、MIME/type=module不匹配或语法错误),它无法提供帮助。

为处理此类情况,可以使用服务器端渲染的HTML或内容优先模板,这样即使水合/JS失败,页面仍能显示有意义的内容。

通过添加回退方案,可以确保用户不会疑惑网站是否已损坏。即使JavaScript必不可少,通过承认依赖关系并提供替代方案,仍然可以使体验更具可访问性。

总结

无JavaScript测试不是为了支持所有可能的边缘情况,而是为了构建具有韧性、可访问性和包容性的网站。

  • 网络连接不可靠的用户能从回退内容中受益
  • 当脚本失效时,所有人都能从可预测、可靠的体验中受益

无障碍设计旨在减少任何地方出现的障碍。而有时候,最大的障碍就是假设JavaScript总能正常工作。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:UE5小游戏开发 - 武士决斗

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡

经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡1 DIP核心思想与三层架构概述 依赖倒置原则(Dependency Inversion Principle,DIP)作为SOLID原则中的重要组成部分,其核心主张是高层模…

网站开发费入什么科目个人简介html代码简单

前言 JavaScript 的核心 ECMAScript 描述了该语言的语法和基本对象&#xff1b; DOM 描述了处理网页内容的方法和接口&#xff1b; BOM 描述了与浏览器进行交互的方法和接口。 ECMAScript、DOM 和 BOM 尽管 ECMAScript 是一个重要的标准&#xff0c;但它并不是 JavaScript 唯一…

PolarFire SOC Auto Update 和 IAP 文档阅读(三) AUTO UPDATE

PolarFire SOC Auto Update 和 IAP 文档阅读(三) AUTO UPDATE 文档来自:PolarFire FPGA and PolarFire SoC FPGA Programming User GuidePolarFire SOC Auto Update 和 IAP 文档阅读一 - 所长 - 博客园 PolarFire SO…

前台部分数据不显示

去数据库查了下,数据都存在,很完整,原因就在前台。 查出来的数据量很大,删除部分数据后,前台正常显示了,应该就是数据量太多,序列化的时候出问题了。 查了下,JsonConvert.SerializeObject 没有“字数”限制,但…

指针定义以及二维数组内存地址(java/c++/python)

一、指针是什么? 指针是一个存储内存地址的变量,它指向(引用)内存中的另一个数据(变量、数组、对象等)。通过指针可以直接访问或修改它所指向的内存中的数据,这使得指针成为直接操作内存的重要工具。 简单说:指…

一款不错的PDF工具,吾爱出品 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

解码数据结构线性表之顺序表

顺序表的本质与核心特性 顺序表的定义 顺序表是 “用一组内存地址连续的内存单元依次存储线性表数据元素的存储结构”,其核心是 “逻辑顺序与物理顺序完全一致”—— 即线性表中第i个元素(逻辑上),必然存储在与第i…

中电金信:源启数据集成平台全新升级,实现便捷与性能双飞跃

源启数据集成平台作为源启数据资产平台的重要组成部分,专注于实现跨源数据的高效汇聚与迁移,提供一站式数据集成服务。平台适用于银行、保险、证券、能源、制造等行业,能够实现对多源异构数据从采集、转换到写入的全…

Jupyter NoteBook / Jupyter Lab的安装与使用

Jupyter Lab是Jupyter NoteBook的下一代产品,这两个产品都是基于浏览器的代码编写、运行及文档编辑的交互式环境。Jupyter Lab是Jupyter NoteBook的下一代产品,这两个产品都是基于浏览器的代码编写、运行及文档编辑的…

完整教程:科技的温情——挽救鼠鼠/兔兔的生命

完整教程:科技的温情——挽救鼠鼠/兔兔的生命

易基因:Nat Rev Drug Discov/IF101.8:何川团队顶刊综述RNA修饰系统作为疾病治疗靶点的研究进展

近日,芝加哥大学华人科学家何川教授团队在国际顶刊《Nature Reviews Drug Discovery》(IF=101.8) 发表题为 “RNA modification systems as therapeutic targets” 的综述文章,全景式阐述了 RNA 修饰系统作为治疗靶点…

国产适配 + AI 一键生成!亿图图示 14.5 全平台绘图指南:260 种图表 + Visio 兼容,开发者 / 办公党速藏

作为开发者、产品经理或办公人士,你是否常陷入 “绘图工具跨平台不兼容”“手动画流程图耗时久”“国产系统适配难” 的困境?亿图图示 14.5 凭借 “全平台覆盖 + AI 效率升级 + 国产生态兼容” 的三重优势,直接破解…

关闭Cadence Allegro Design Entry CIS(OrCAD Capture)的Start Page

自从更新17.4补丁到某个版本,以前的用命令关闭起始页或者修改.ini文件的方法不管用了。看到启动时命令窗口里加载了一堆脚本,找到它们在D:\Cadence\SPB_17.4\tools\capture\tclscripts\capAutoLoad\路径下。由于我不…

Mini L-CTF 2025 WP

s1gn1n ida打开发现存在花指令在这里我一开始犯了一个错误我把jz和jnz进行nop没有nop C7 解释下为什么C7也要nop,因为把前面的跳转nop留下单独一条C7,CPU会继续往下读取字节,形成一个完整的指令。后面的正常的代码会…

美食网站开发与设计任务书国外移动端网站模板

近日&#xff0c;在 2022 云栖大会龙蜥峰会 eBPF & Linux 稳定性专场上&#xff0c;来自 eBPF 技术探索 SIG Maintainer 、浙江大学的郑昱笙分享了《eunomia-bpf&#xff1a;eBPF 轻量级开发框架》技术演讲&#xff0c;以下为本次演讲内容&#xff1a; 大家好&#xff01;…

电子商务网站建设案例wordpress更改作者信息

我们上一章简单先了解了ribbonx的基本内容,以及使用举例实现自己修改ribbox的内容,本章紧接上一章,先讲解一下ribbonx的button控件。 在功能区的按钮中,可以使用内置图像或提供自已的图像,可以指定大按钮或者更小的形式,添加少量的代码甚至可以同时提供标签。此外,可以利…

K8S APIServer压力高,导致控制器Leader续约失败而重启问题

K8S APIServer压力高,导致控制器Leader续约失败而重启问题 下图是控制器Leader成功续约的日志。 这中间续约卡住了,没有成功续约的日志。从最后一次成功续约日志到重启日志,中间有2分半钟(21:07:22-23:10:03). …

【2025-09-24】连岳摘抄

23:59信任他人是一种理性、善良、有效的选择。相信人性的光明,怀抱善意与人交往,试着多给他人些理解、体谅,我们自己也能从这段关系中得到正面的回馈与成长。——彭凯平一个孩子养得好,他的未来是无限的。两重无限…

详细介绍:基于STM32F103C8T6与HC-08蓝牙模块实现手机连接方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …