You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manifest V3支持Promise的API列表查询及代码报错咨询

Chrome扩展Manifest V3 Promise支持API问题

Manifest V3概述中提到:

  • 许多方法已添加Promise支持,不过回调仍作为替代方案被支持。(我们最终会为所有合适的方法提供Promise支持。)

现咨询是否存在已适配Promise的API列表?

比如以下代码运行时出现错误:

chrome.contextMenus.removeAll()
.then(() => console.log('done'));

// Uncaught TypeError: Cannot read properties of undefined (reading 'then')

解答

目前Chrome官方并没有单独整理出一份完整的Manifest V3 Promise支持API列表,但可以通过以下方式处理相关问题:

  1. 快速判断API是否支持Promise
    直接查看对应API的官方文档说明,或者调用方法后打印返回值——如果返回Promise对象,就支持链式调用;否则只能用回调写法。

  2. 解决chrome.contextMenus.removeAll的报错问题
    这个API目前不支持Promise,必须使用回调写法,同时要记得处理可能的错误:

    chrome.contextMenus.removeAll(() => {
      if (chrome.runtime.lastError) {
        console.error('移除菜单失败:', chrome.runtime.lastError);
        return;
      }
      console.log('done');
    });
    
  3. 手动封装Promise(通用方案)
    对于不支持Promise的API,可以自己写一个简单的封装函数,统一转为Promise风格:

    function promisifyChromeApi(fn) {
      return (...args) => new Promise((resolve, reject) => {
        fn(...args, (result) => {
          const err = chrome.runtime.lastError;
          err ? reject(err) : resolve(result);
        });
      });
    }
    
    // 封装后使用
    const removeAllMenus = promisifyChromeApi(chrome.contextMenus.removeAll);
    removeAllMenus()
      .then(() => console.log('done'))
      .catch(err => console.error(err));
    
  4. 后续更新
    Chrome团队正在逐步为更多Manifest V3 API添加Promise支持,后续版本会覆盖更多方法,建议定期查看官方文档的更新内容。


内容的提问来源于stack exchange,提问作者erosman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:40:30