当前位置: 首页 > news >正文

开发 Chrome 扩展中的侧边栏图标设置实录(Manifest V3)

在开发自己的 Chrome 扩展 Pocket Bookmarks(口袋书签) 的过程中,我遇到了一个看似简单却颇具挑战的问题:如何在扩展的侧边栏显示自定义图标?

这篇文章记录一下我踩过的坑,以及最终的解决方案。
这里说的侧边栏图标,即是下图中红框部分。
在这里插入图片描述


🎯 需求:更换侧边栏图标

在扩展的 UI 中,左上角默认显示的是一枚灰色的字母图标(即扩展名的首字母),这对一个精心设计的产品来说太简陋了。我希望它变成自定义的卡通袋鼠图标,以匹配品牌形象。


💡 初步尝试:在 manifest.json 中添加 sidebar_action

我首先参考了 Chrome 早期支持的 sidebar_action 配置:

"sidebar_action": {"default_title": "Pocket Bookmarks","default_icon": {"16": "icons/icon-16.png","32": "icons/icon-32.png","48": "icons/icon-48.png","128": "icons/icon-128.png"},"default_panel": "sidebar.html"
}

但经过实际测试,图标没有任何变化。查阅资料后发现,sidebar_action 是早期提案,现在基本废弃,且仅在部分测试通道中有效


✅ 正确做法:设置扩展的主图标

Chrome 的侧边栏图标实际上取决于扩展的整体图标,即 manifest 中的 "icons" 字段:

"icons": {"16": "icons/icon-16.png","32": "icons/icon-32.png","48": "icons/icon-48.png","128": "icons/icon-128.png"
}

这不是用于 popup 或 action 的 icon,而是整个扩展打包上传到 Chrome Web Store 或加载到浏览器时显示的图标来源。

同时建议保留 action.default_icon,这样扩展工具栏也能显示一致的图标。


🧪 图标不显示的常见原因

在折腾过程中,我也踩了几个小坑:

问题原因解决办法
图标不显示图标尺寸不对或路径错误确保是 PNG 格式,分辨率为 16×16、32×32、48×48、128×128
图标变成灰色首字母没有设置 icons 字段在 manifest 顶层加上 icons
图标显示空白使用 SVG 或透明度错误推荐使用透明背景的 PNG,避免纯白图标在白色界面中“消失”

🧰 最终 manifest 配置

{"manifest_version": 3,"name": "Pocket Bookmarks","version": "1.0","description": "口袋书签,精准分类,高效导航。","action": {"default_popup": "popup.html","default_icon": {"16": "icons/icon-16.png","32": "icons/icon-32.png","48": "icons/icon-48.png","128": "icons/icon-128.png"}},"icons": {"16": "icons/icon-16.png","32": "icons/icon-32.png","48": "icons/icon-48.png","128": "icons/icon-128.png"},"side_panel": {"default_path": "sidebar.html"},...
}

✨ 小结

虽然侧边栏图标设置看似只是 manifest 中的几行配置,但实际上背后涉及:

  • Chrome 扩展图标的层级机制
  • Manifest V3 对旧 API 的兼容性问题
  • 浏览器界面的显示规则

最终,记得:设置扩展的 icons 字段,才是更换侧边栏图标的正确打开方式。


📌 参考链接

  • Chrome Extensions Manifest V3 官方文档
  • side_panel API 简介

插件正在开发中,敬请期待。

pc端和移动端体验效果:

口袋书签

点击上面面链接,可以体验实现效果。另外可以免费使用新一代跨平台书签系统:

  • 跨平台
  • AI助力
  • 自动抓取目前连接的关键数据
  • 一级分类,多标签标注
  • 收藏统计,有图有数据
  • 快捷访问,多种展示模式
  • 轻松实现全局分享和按分类分享
  • 常用top10、按分类,按标签快捷查
  • 按访问数和创建时间排序

相关文章:

  • 医疗人工智能大模型中的关键能力:【中期训练】mid-training
  • 【javascript】console对象
  • 尤雨溪宣布:Vue 生态正式引入 AI
  • lvgl多语言设置
  • 深度学习模型的部署实践与Web框架选择
  • vue3的页面跳转方法汇总(路由跳转,组件跳转)
  • dubbo-token验证
  • 大数据应用开发和项目实战-电商双11美妆数据分析2
  • 《数据结构:二叉搜索树(Binary Search Tree)》
  • 面向智能体开发的声明式语言:可行性分析与未来图景
  • SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
  • 【论文阅读】Reconstructive Neuron Pruning for Backdoor Defense
  • 内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)
  • C++ set和map系列(关联式容器)的介绍及使用
  • 【论文阅读】Towards Stable Backdoor Purification through Feature Shift Tuning
  • Web 架构之负载均衡全解析
  • 【论文阅读】HunyuanVideo: A Systematic Framework For Large Video Generative Models
  • LangChain4j简介
  • 记录一个rabbitmq因为linux主机名服务无法启动的问题
  • UE5.3 C++ 如何在c++ 中拿到UI元素,并绑定不同事件响应功能
  • 祝贺!苏翊鸣成功解锁“2160”
  • “苏河超级管”调研:桥下公园“留白”很好,指引差点
  • 习近平会见斯洛伐克总理菲佐
  • 来论|建设性推进缅北和平进程——中国的智慧与担当
  • 马上评|让“贾宝玉是长子长孙”争议回归理性讨论
  • 乌克兰议会批准美乌矿产协议