WXT浏览器插件开发中文教程(14)----插件API的调用方式

前言

大家好,我是倔强青铜三 。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

扩展 API [​](#扩展 API "#extension-apis")

Chrome 文档 • Firefox 文档

不同浏览器提供了不同的全局变量用于访问扩展 API(Chrome 提供 chrome,Firefox 提供 browser 等)。

WXT 将这两种合并为一个统一的 API,通过 browser 变量访问。

ts 复制代码
import { browser } from 'wxt/browser';
browser.action.onClicked.addListener(() => {
  // ...
});

提示 :启用自动导入后,甚至无需从 wxt/browser 导入此变量!

WXT 提供的 browser 变量是浏览器在运行时提供的 browser 或 chrome 全局变量的简单导出:

mjs 复制代码
export const browser = globalThis.browser?.runtime?.id
  ? globalThis.browser
  : globalThis.chrome;

这意味着你可以使用适用于 MV2 和 MV3 的 Promise 风格 API,并且它可以在所有浏览器(Chromium、Firefox、Safari 等)中工作。

访问类型 ​

所有类型都可以通过 WXT 的 Browser 命名空间访问:

ts 复制代码
import { Browser } from 'wxt/browser';
function handleMessage(message: any, sender: Browser.runtime.MessageSender) {
  // ...
}

使用 webextension-polyfill [​](#使用 webextension-polyfill "#using-webextension-polyfill")

如果你想在导入 browser 时使用 webextension-polyfill,可以通过安装 @wxt-dev/webextension-polyfill 包来实现。

查看其 安装指南 以了解如何开始。

功能检测 ​

根据清单版本、浏览器和权限,某些 API 在运行时可能不可用。如果某个 API 不可用,它将为 undefined。

警告 :类型在这里帮不了你。WXT 为 browser 提供的类型假设所有 API 都存在。你需要自行判断某个 API 是否可用。

要检查某个 API 是否可用,可以使用功能检测:

ts 复制代码
if (browser.runtime.onSuspend != null) {
  browser.runtime.onSuspend.addListener(() => {
    // ...
  });
}

在这里,可选链操作符 是你的好帮手:

ts 复制代码
browser.runtime.onSuspend?.addListener(() => {
  // ...
});

或者,如果你想在不同名称下使用类似的 API(以支持 MV2 和 MV3),可以这样做:

ts 复制代码
(browser.action ?? browser.browser_action).onClicked.addListener(() => {
  //
});

最后感谢阅读!欢迎关注我,微信公众号 :倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

相关推荐
谙忆10247 分钟前
图像任务超时怎么重试:先分执行状态,再做结果验收
javascript
@大迁世界8 小时前
Firefox 本地模式:localhost 再见了 ?
前端·架构
米米商聊10 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
echome88811 小时前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
时间的情敌11 小时前
OpenLayers 实战|Vue3 + OpenLayers 完整工程案例(加载天地图、要素、弹窗、绘制、WFS)
前端·openlayers
陈随易11 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
前端的日常12 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
计算机魔术师12 小时前
谷歌搜索广告踩刹车,AI广告成为救命稻草
前端
总要学点什么12 小时前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
IT_陈寒12 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端