前端图标(好消息!Chrome 终于宣布原生支持 元素)

前端图标(好消息!Chrome 终于宣布原生支持  元素)
好消息!Chrome 终于宣布原生支持 元素

大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

从 Chrome 144 版本开始,开发者可以使用全新的 HTML 元素。其标志着网站请求用户位置数据的方式发生了重大转变,即从脚本触发的权限提示转向声明式、以用户操作为导向的体验。显著减少了处理权限状态和错误所需的样板代码,并能更清晰地表明用户意图,从而有助于避免浏览器干预,例如:静默阻塞。

为什么要使用元素

目前,地理位置信息流依赖于 Geolocation API,该 API 会触发权限提示。如果提示出现得不合时宜,例如:在页面加载时触发,就可能打断用户的操作。更重要的是,由于浏览器的干预,依赖这些强制性提示变得越来越不可行。例如:如果用户三次忽略提示,Chrome 会主动阻止权限请求,强制执行一个初始持续时间为一周的临时静默阻止。这意味着尝试触发提示的旧代码可能会静默失败,导致用户体验不佳且无法明确启用该功能。

前端图标(好消息!Chrome 终于宣布原生支持  元素)

if ("geolocation" in navigator) {  /* geolocation is available */} else {  /* geolocation IS NOT available */}function success(position) {  doSomething(position.coords.latitude, position.coords.longitude);}function error() {  alert("Sorry, no position available.");}const options = {  enableHighAccuracy: true,  maximumAge: 30000,  timeout: 27000,};const watchID = navigator.geolocation.watchPosition(success, error, options);navigator.geolocation.getCurrentPosition((position) => {  doSomething(position.coords.latitude, position.coords.longitude);});

此外,标准提示通常缺乏上下文。如果提示意外出现,用户可能会下意识地或无意中阻止而没有意识到此操作会造成难以撤销的永久性阻止。这种上下文缺失而非功能本身才是导致高拒绝率的主要原因。

元素通过确保请求完全由用户发起来解决上下文缺失问题,提供三大显著优势:

  • 清晰的意图和时机:用户点击 “使用位置” 按钮,即可明确表明其在特定时刻使用位置信息的意图。这表明用户理解位置信息的价值并主动希望使用,从而将潜在的阻止转化为成功的交互。
  • 简化的恢复流程:如果用户之前在浏览网站时阻止了位置访问权限,点击该元素将触发专门的恢复流程,从而有助于用户在真正需要使用位置信息时重新启用而无需费力地深入浏览器设置。
  • 自动刷新:如果已授予权限,点击该元素将如同刷新按钮一般,立即获取新数据而无需再次提示。

如何使用元素

集成该元素所需的样板代码比 JavaScript API 少得多。开发者无需手动管理回调和错误状态,只需将该标签添加到页面并监听 onlocation 事件即可。

function handleLocation(event) {  if (event.target.position) {    const { latitude, longitude } = event.target.position.coords;    console.log("Location retrieved:", latitude, longitude);  } else if (event.target.error) {    console.error("Error:", event.target.error.message);  }}

下面是关键属性和特性:

  • autolocate:元素加载时自动尝试获取位置信息,但前提是当前权限状态已允许
  • accuracymode:接受“precise”或“approximate”值,对应于标准的 enableHighAccuracy 选项
  • watch:切换行为以匹配 watchPosition(),在用户移动时持续触发事件
  • position:DOM 元素上的只读属性,一旦 GeolocationPosition 对象可用,则返回该对象
  • error:只读属性,如果请求失败,则返回 GeolocationPositionError

渐进增强策略

标准化新的 HTML 元素是一个循序渐进的过程。但是,开发者现在就可以采用 元素而不会影响其他浏览器用户的兼容性。

该元素的设计旨在实现优雅降级,即不支持 元素的浏览器会将其视为 HTMLUnknownElement。重要的是,如果浏览器支持该元素,则不会渲染其子元素。这使得开发者可以编写简洁的 HTML 代码,以兼容所有浏览器。

如果想完全控制回退(Fallback)体验,可以使用子元素(例如:按钮),并将其与常规 JavaScript 地理位置 API 结合起来。

  <!-- Fallback contents if the element is not supported -->  

参考资料

https://developer.chrome.com/blog/geolocation-html-element

https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API/Using_the_Geolocation_API

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有