发布于 2025-12-07 0 阅读
0

10 个你可能想要使用的鲜为人知的 Web API 一些众所周知的 Web API tl;dr 关于 Web API 的重点 鲜为人知但有用的 Web API ...还有更多 进一步阅读

你可能想使用的 10 个鲜为人知的 Web API

一些著名的 Web API

总结

关于 Web API 的要点

鲜为人知但实用的 Web API

...还有更多

进一步阅读

API是应用程序编程接口 (API) 的首字母缩写,它定义了多个软件架构层之间的交互。程序员在软件开发中使用 API 可以轻松执行复杂的任务。如果没有 API,程序员的生活将会非常痛苦,因为他们无法获得适当的数据访问权限(例如安全性),无法了解不必要的底层细节等等。

说到 Web API,有极其有用的对象、属性和函数可用于执行从访问 DOM 等简单任务到管理音频、视频、图形等复杂任务。

一些著名的 Web API

如果您有 Web 开发经验,那么您一定在使用其中的许多 API。以下列出了一些非常知名的 Web API。

在本文中,我将讨论另外 10 个不太流行的 Web API。不太流行并不意味着它们没用。您可以在项目的各种用例中使用它们。请仔细阅读。

总结

如果您想立即查看源代码或查看演示,以下是它们的快速链接:

注意:Web API 实际上是使用原生 JavaScript 编写和公开的接口、函数、对象和属性。然而,Web API 的使用范围并不仅限于基于原生 JavaScript 的应用程序。在基于 Angular、React 或 Vue 的应用程序中,它们也同样简单易用。

本文中用于演示 Web API 的所有示例均使用 React.js 编写。您可以在上述 GitHub 链接中找到它们。欢迎随时 fork、修改和使用!

关于 Web API 的要点

使用 Web API 的一大痛点是,大多数 API 尚未标准化。这意味着不同浏览器厂商对 Web API 的支持可能有所不同。例如,你可能会发现某个 API 可以在 Chrome 浏览器上运行,但 Firefox 或 Edge 浏览器尚未支持。

我建议用几种方法来检查这个问题,

  • 只需输入 Web API 的名称,即可从“我可以使用”网站检查其是否支持该 Web API 。图像.png
  • 如果某个 Web API 不受支持,请实现回退或反馈。大多数 Web API 都提供了检查 API 是否受支持的方法。您可以选择在 API 不受支持时实现回退,或者至少通过提供反馈消息来通知用户。图像.png

鲜为人知但实用的 Web API

好了,现在开始了解它们吧。希望你也觉得这些有用。

1. 📺 全屏 API

您是否需要在全屏模式下显示任何 DOM 元素?全屏用例对于游戏应用、在线视频平台(例如 YouTube)等应用来说非常苛刻。

提供Fullscreen API了以全屏模式呈现特定元素(及其子元素)的方法。此外,还提供了在不再需要时退出全屏模式的方法。不仅如此,此 API 还可以帮助执行 DOM 元素在进入或退出全屏模式时的任何操作。

在下面的例子中,我最喜欢的圣诞老人可以轻松进入全屏模式并退出。

替代文本

在下面的代码中,函数对具有 id 的元素manageFullScreen()使用API 。requestFullscreen()fs_id

const manageFullscreen = () => {
   document.getElementById('fs_id').requestFullscreen();
}
Enter fullscreen mode Exit fullscreen mode

这个带有id的元素,fs_id有DIV一个子元素,即圣诞老人图像。

<div className="column">
  <div id="fs_id">
    <Img fixed={imageData.image.childImageSharp.fixed} alt="santa" />
   </div>

    <StyledButton 
         onClick={manageFullscreen}>
            Enter Fullscreen with Santa
    </StyledButton>
 </div>
Enter fullscreen mode Exit fullscreen mode

您可以检查Fullscreen API浏览器是否支持,

if (document.fullscreenEnabled) {
   setSupported(true);
} else {
   setSupported(false);
}
Enter fullscreen mode Exit fullscreen mode

还要注意一些有用的处理程序,例如,

  • onfullscreenchange:全屏更改事件的事件处理程序。
  • onfullscreenerror:全屏错误事件的事件处理程序。

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-fullscreen/

2. 📋 剪贴板异步 API

计算机中的剪贴板是什么?

剪贴板是某些操作系统提供的缓冲区,用于应用程序内部和应用程序之间的短期存储和传输。

剪贴板主要可以执行三种操作。它们是 、copy和cut。paste剪贴板 API 提供了响应这三种操作的能力。

有趣的是,将内容复制到剪贴板是开放的,无需用户权限。但是,要将内容从剪贴板粘贴到用户应用程序,则需要用户授予权限。这可以通过另一个名为“权限 API”的 Web API 来实现。

图像.png

这是一个复制粘贴操作的简单示例,

替代文本

这是检查浏览器是否支持该功能的方法,

if (navigator.clipboard 
     && navigator.clipboard.read 
     && navigator.clipboard.write) {
   setSupported(true);
} else {
   setSupported(false);
}
Enter fullscreen mode Exit fullscreen mode

这是用于将内容写入剪贴板的异步 API 函数,

async function performCopy(event) {
   event.preventDefault();
   try {
      await navigator.clipboard.writeText(copyText);
      console.log(`${copyText} copied to clipboard`);
   } catch (err) {
      console.error('Failed to copy: ', err);
   }
}
Enter fullscreen mode Exit fullscreen mode

异步 API 函数从剪贴板读取内容并对其进行处理,

async function performPaste(event) {
   event.preventDefault();
   try {
       const text = await navigator.clipboard.readText();
       setPastetext(text);
       console.log('Pasted content: ', text);
   } catch (err) {
      console.error('Failed to read clipboard contents: ', err);
   }
}
Enter fullscreen mode Exit fullscreen mode

注意:通过包含Clipboard Async API,您可以摆脱document.execCommad()函数的使用,因为它现在已经过时了。

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-clipboard-apis/

3. 🧐 调整观察者 API

您是否想根据 DOM 元素的内容或边框的变化执行某些操作?您是否正在考虑自己编写一个处理程序?如果我告诉您,Web API 实现已经提供了一个处理程序,您会怎么做?

这是一个关于哑按钮的故事。我们使用一个范围滑块来调整按钮的大小。当按钮大小调整时,我们想控制文本的颜色,但又不想让按钮感知到太多信息。

替代文本

首先,创建一个按钮并指定一个 id,以便我们稍后可以使用 id 访问该按钮。

<StyledButton id="dumbBtnId">
   I am a Dumb Button
</StyledButton>
Enter fullscreen mode Exit fullscreen mode

现在我们使用 HTML5 的输入类型创建一个滑块range。resize()滑块值发生变化时会调用一个函数。

<div>
   <input 
         onChange={(event) => resize(event)} 
         type="range" 
         min={minRange} 
         max={maxRange} 
         defaultValue={rangeValue} />
</div>
Enter fullscreen mode Exit fullscreen mode

该resize()函数只是将按钮的宽度设置为滑块范围值,以便可以动态调整其大小。

const resize = event => {
   const value = event.target.valueAsNumber;
   setRangeValue(value);
   let dumbBtn = document.getElementById('dumbBtnId');
   dumbBtn.style.width = `${value}px`;
 }
Enter fullscreen mode Exit fullscreen mode

到目前为止,一切顺利吗?现在,每当范围值发生变化时,按钮的大小都会调整。我们观察ResizeObserver这个变化,并改变按钮文本的颜色。

useEffect(() => {
   try {
            let dumbBtn = document.getElementById('dumbBtnId');
            var resizeObserver = new ResizeObserver(entries => {
                for(const entry of entries) {
                    // Get the button element and color it
                    // based on the range values like this,
                   entry.target.style.color = 'green`;
                }
      });
      resizeObserver.observe(dumbBtn);
   } catch(e) {
            setSupported(false);
            console.log(e);      
   }
}, [rangeValue]);
Enter fullscreen mode Exit fullscreen mode

演示的直接链接:https://demo.greenroots.info/web-apis/web-api-resize-observer/

4.📷 图像捕获 API

有一些很酷且实用的 API 围绕着用户媒体,例如音频、视频等。我特别喜欢它,Image Capture API它可以帮助我们从视频设备(例如网络摄像头)捕获图像或抓取帧。不仅如此,你还可以执行捕获图像或抓取帧的操作。

首先,获取用户媒体访问权限。在本例中,我们获取的是网络摄像头访问权限。

navigator.mediaDevices.getUserMedia({video: true})
  .then(mediaStream => {
     document.querySelector('video').srcObject = mediaStream;
     const track = mediaStream.getVideoTracks()[0];
     setTrack(track);
  }).catch(error => {
     console.error(` ${error} is not yet supported`);
     setError(error);
});
Enter fullscreen mode Exit fullscreen mode

就像剪贴板粘贴操作一样,用户必须授予网络摄像头媒体访问权限。

图像.png

现在抓取一个框架并执行一些操作。在这个例子中,我只是在 Canvas 上绘制了框架。

const imageCapture = new ImageCapture(track);
    imageCapture.grabFrame()
      .then(imageBitmap => {
          const canvas = document.querySelector('#grabFrameCanvas');
          drawCanvas(canvas, imageBitmap);
    }).catch(error => {
          console.log(error);
          setError(error);
});
Enter fullscreen mode Exit fullscreen mode

我也可以拍照并做类似的事情。

const imageCapture = new ImageCapture(track);
    imageCapture.takePhoto().then(blob => createImageBitmap(blob))
      .then(imageBitmap => {
          const canvas = document.querySelector('#takePhotoCanvas');
          drawCanvas(canvas, imageBitmap);
    }).catch(error => {
          console.log(error);
          setError(error);
});
Enter fullscreen mode Exit fullscreen mode

要停止网络摄像头的视频流,只需stop()在正在运行的视频轨道上调用该方法即可。

const videoOff = () => {
   track.stop();
 }
Enter fullscreen mode Exit fullscreen mode

chrome_Umvi16wUlu.png

还要注意方法,

  • getPhotoCapabilities():获取可用配置选项的范围。
  • getPhotoSettings():获取当前照片配置设置。

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-image-capture/

5. 📡 广播频道 API

这Broadcast Channel API允许浏览上下文(窗口、标签页、iframe)和同源的 worker 之间进行通信。想象一下这样的用例:当你从浏览器标签页中运行的应用注销后,你想将注销过程广播到同一浏览器其他标签页中打开的应用实例。

下面是一个示例,其中发送者向接收者发送一条消息,并且该消息被广播到其浏览上下文(在本例中为标签),

替代文本

第一步是创建一个广播频道,并为其指定一个唯一的名称。同时定义要广播的内容(消息)。

 const CHANNEL_NAME = "greenroots_channel";
 const bc = new BroadcastChannel(CHANNEL_NAME);
 const message = 'I am wonderful!';
Enter fullscreen mode Exit fullscreen mode

要广播消息,请postMessage()通过传递消息来调用频道上的方法。

const sendMessage = () => {
   bc.postMessage(message);
}
Enter fullscreen mode Exit fullscreen mode

在接收端,收听广播的任何人都会收到发送的消息通知。

 const CHANNEL_NAME = "greenroots_channel";
 const bc = new BroadcastChannel(CHANNEL_NAME);

 bc.addEventListener('message', function(event) {
    console.log(`Received message, "${event.data}", on the channel, "${CHANNEL_NAME}"`);
    const output = document.getElementById('msg');
    output.innerText = event.data;
 });
Enter fullscreen mode Exit fullscreen mode

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-broadcast/

6.⏱️性能接口API

该Performance接口提供对三大 API 的访问,即

  • 导航
  • 记忆
  • 定时

以下是内存使用情况的一个例子,

console.log(performance.memory);
Enter fullscreen mode Exit fullscreen mode

图像.png

这是另一个如何获取导航性能统计数据的示例,

const [entry] = performance.getEntriesByType("navigation");
console.table(entry)
Enter fullscreen mode Exit fullscreen mode

图像.png

演示的直接链接:https://demo.greenroots.info/web-apis/web-api-performance/

7. 🔋 电池状态 API

你想了解笔记本电脑、PC 或其他设备的电池状况吗?是的,有一个 Web API 可以帮你实现这一点。Battery Status API这个 API 可以帮助你了解所有信息,例如电池是否正在充电、剩余电量以及处理与充电相关的状态变化的处理程序。

下面是一个示例,显示了当我插入和拔出笔记本电脑充电器时状态的变化,

替代文本

下面的代码解释了如何处理句柄以及如何处理与电池相关的信息。

navigator.getBattery().then(function (battery) {

   // handle the charging change event
   battery.addEventListener("chargingchange", function () {
      console.log("Battery charging? " + (battery.charging ? "Yes" : "No"));
   });

   // handle charge level change
   battery.addEventListener("levelchange", function () {
      console.log("Battery level: " + battery.level * 100 + "%");
   });

   // handle charging time change
   battery.addEventListener("chargingtimechange", function () {
      console.log( "Battery charging time: " + battery.chargingTime + " seconds");
   });

   // handle discharging time change
   battery.addEventListener("dischargingtimechange", function () {
      console.log("Battery discharging time: " + battery.dischargingTime + " seconds");
   });

});
Enter fullscreen mode Exit fullscreen mode

我喜欢这个 API,用起来很有趣。可惜的是,这个 API 以后可能会被淘汰。

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-battery/

8. 📶 网络信息 API

提供Network Information API有关网络类型(例如“wifi”、“蜂窝”等)、保存数据模式、带宽等的信息。

console.log(navigator.connection);
Enter fullscreen mode Exit fullscreen mode

图像.png

演示的直接链接:https://demo.greenroots.info/web-apis/web-api-network-info/

9. 📳 振动 API

这是另一个示例,您可以连接到系统硬件并执行操作。它Vibration API提供了启动设备振动(即时或持续)和停止振动的方法。

useEffect(() => {
   if (start) {
      // vibrate for 2 seconds
      navigator.vibrate(2000);
   } else {
      // stop vibration
      navigator.vibrate(0);
   }
}, [start]);
Enter fullscreen mode Exit fullscreen mode

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-vibration/

10.🤙 蓝牙 API

此 Web API 允许您连接到蓝牙设备。

navigator.bluetooth.requestDevice({
   acceptAllDevices: true
}).then(device => {            
   setDeviceName(device.name);
   setDeviceId(device.id)
   setDeviceConnected(device.connected);
}).catch(err => {
   console.log(err);
   setError(true);
})
Enter fullscreen mode Exit fullscreen mode

演示的直接链接:https://demo.greenroots.info/web-apis/web-apis-bluetooth/

...还有更多

  • 支付请求 API:为商家和用户提供一致的支付用户体验。
  • 触摸事件:提供相对低级的 API,可用于支持特定于应用程序的多点触控交互,例如双指手势。
  • 页面可见性:提供您可以观察的事件,以了解文档何时可见或隐藏
  • Channel Messaging API:另一种在浏览上下文中发送消息的好方法。然而,与广播不同,这里发送的是一对一消息。

我将很快把每个示例添加到Web API DemoLab。

进一步阅读




如果对您有用,请点赞/分享,以便其他人也能看到。封面图片是在freepik的一张酷炫作品基础上即兴创作的。 文章来源:https://dev.to/atapas/10-lesser-known-web-apis-you-may-want-to-use-5g0g