javascript中的Web API有哪些【教程】
发布时间 - 2026-01-31 00:00:00 点击率:次Web API 是浏览器实现的一组非 ECMAScript 标准的全局接口,如 fetch、localStorage、document.querySelector、setTimeout、Geolocation 等,挂载于 window 或 navigator 上,开箱即用但受浏览器支持与权限策略约束。
JavaScript 中没有叫“Web API”的单一接口,它是一组浏览器提供的、通过 JavaScript 调用的内置功能集合,不是 ECMAScript 标准的一部分,而是由浏览器实现的。
哪些接口算 Web API?看是否挂载在 window 或 navigator 等全局对象上
真正属于 Web API 的,是那些你能在浏览器控制台里直接访问的对象和方法,比如:
-
fetch()、XMLHttpRequest(网络请求) -
localStorage、sessionStorage(客户端存储) -
document、Element、Node相关的 DOM 操作方法(如querySelector()、addEventListener()) -
setTimeout()、setInterval()(虽然语义上像 JS 原生,但实际由宿主环境提供) -
Geolocation(navigator.geolocation)、Notification、Clipboard(navigator.clipboard)等设备/系统级能力
它们共同特点是:不依赖第三方库,开箱即用,但行为受浏览器支持程度和权限策略(如 CORS、HTTPS 限制)约束。
fetch() 和 XMLHttpRequest 怎么选?别只看“新旧”
fetch() 更现代、基于 Promise,但默认不带 cookie,且 404 或 500 不会 reject —— 它只在网络失败时才抛错。而 XMLHttpRequest 更底层、可监听上传进度,适合大文件或需要精细控制的场景。
- 要用 cookie:加
credentials: 'include'(fetch),或设withCredentials = true(XMLHttpRequest) - 要判断 HTTP 状态码是否成功:
if (!res.ok) throw new Error,不能只靠
(res.status)
catch - 上传进度监听:只有
XMLHttpRequest.upload.onprogress可靠;fetch需配合ReadableStream+TransformStream手动拆包,成本高
DOM 操作中哪些方法容易被当成“JS 原生”,其实是 Web API?
像 document.getElementById()、element.classList.add()、event.preventDefault() 这些都不是 JavaScript 引擎内置的,而是浏览器实现的 DOM 规范接口。这意味着:
- Node.js 环境里完全不可用(没
document) - 部分方法兼容性差:比如
element.replaceChildren()在旧版 Safari 不支持,得用innerHTML = ''+append()替代 -
querySelectorAll()返回的是NodeList,不是数组 —— 不能直接用map(),得先转:[...nodeList].map(...)或用Array.from(nodeList)
权限类 API(如 navigator.permissions)为什么常返回 prompt 而不是 granted?
浏览器对摄像头、位置、通知等敏感 API 实施渐进式授权策略。首次调用 navigator.permissions.query({ name: 'geolocation' }) 通常返回 state: 'prompt',不代表拒绝,而是“还没问用户”。真正触发弹窗的是后续调用具体 API,比如 navigator.geolocation.getCurrentPosition()。
- 不要依赖
query()结果做逻辑分支,它只是状态快照 - 调用
getCurrentPosition()时必须处理error.code === 1(PERMISSION_DENIED)和error.code === 2(POSITION_UNAVAILABLE)等不同错误类型 - iOS Safari 对
Notification.requestPermission()有额外限制:必须由用户手势(如 click)触发,否则静默失败
Web API 的边界其实很模糊 —— 同一个函数,在 Chrome 里是标准实现,在 Node.js 里可能压根不存在,或者被 globalThis 上的另一个同名函数覆盖。用之前,先查 MDN 页面右上角的支持表格,比猜“应该有”靠谱得多。
# javascript
# java
# html
# js
# node.js
# node
# cookie
# 浏览器
# app
# ssl
# chrome
# safari
# ecmascript
# Array
# if
# include
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
nginx修改上传文件大小限制的方法
如何在阿里云服务器自主搭建网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何正确下载安装西数主机建站助手?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何在VPS电脑上快速搭建网站?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
北京专业网站制作设计师招聘,北京白云观官方网站?
制作公司内部网站有哪些,内网如何建网站?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
在线教育网站制作平台,山西立德教育官网?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
JS经典正则表达式笔试题汇总
如何用PHP快速搭建高效网站?分步指南
Java遍历集合的三种方式
Laravel中的withCount方法怎么高效统计关联模型数量
简单实现jsp分页
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
高性能网站服务器配置指南:安全稳定与高效建站核心方案
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
昵图网官网入口 昵图网素材平台官方入口
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何在Windows环境下新建FTP站点并设置权限?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
html5的keygen标签为什么废弃_替代方案说明【解答】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法


