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?看是否挂载在 windownavigator 等全局对象上

真正属于 Web API 的,是那些你能在浏览器控制台里直接访问的对象和方法,比如:

  • fetch()XMLHttpRequest(网络请求)
  • localStoragesessionStorage(客户端存储)
  • documentElementNode 相关的 DOM 操作方法(如 querySelector()addEventListener()
  • setTimeout()setInterval()(虽然语义上像 JS 原生,但实际由宿主环境提供)
  • Geolocationnavigator.geolocation)、NotificationClipboardnavigator.clipboard)等设备/系统级能力

它们共同特点是:不依赖第三方库,开箱即用,但行为受浏览器支持程度和权限策略(如 CORS、HTTPS 限制)约束。

fetch()XMLHttpRequest 怎么选?别只看“新旧”

fetch() 更现代、基于 Promise,但默认不带 cookie,且 404500 不会 reject —— 它只在网络失败时才抛错。而 XMLHttpRequest 更底层、可监听上传进度,适合大文件或需要精细控制的场景。

  • 要用 cookie:加 credentials: 'include'fetch),或设 withCredentials = trueXMLHttpRequest
  • 要判断 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 === 1PERMISSION_DENIED)和 error.code === 2POSITION_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不响应的原因及解决方法