plasmo开发浏览器插件动态setIcon修改插件图标和setBadgeText显示徽标

动态修改图标和设置徽标主要用到action这个api,官网地址:developer.chrome.com/docs/extens...

如果你使用官方原生的方式开发,加载和修改图标应该是比较简单的,但是如果你使用的是plasmo框架开发浏览器插件的话,就会遇到加载图片的路径不正确,导致设置图标错误的问题。这里就说一下在plasmo框架里面加载图标并动态设置。

动态设置图标

因为动态设置图标只能填写两种方式,一个是imageData,另外一个就是加载一个path,使用imageData的方式可以使用canvas画一张图,然后加载上去:

javascript 复制代码
 // change action icon
    const setIcon = () => {
        const canvas = new OffscreenCanvas(16, 16)
        const context = canvas.getContext('2d')
        context.clearRect(0, 0, 16, 16)
        context.fillStyle = '#00FF00' // Green
        context.fillRect(0, 0, 16, 16)
        const imageData = context.getImageData(0, 0, 16, 16)
        chrome.action.setIcon({ imageData: imageData }, () => {
            console.log('set icon callback')
        })
    }

这是一种比较简单的方式,但是如果你想加载一张本地的图片,动态设置为图标该怎么办?

plasmo官方文档加载资源的方式:Import Resolution -- Plasmo

可以加载scss的文件:

javascript 复制代码
import styleText from "data-text:~/assets/style.scss"

// 会自动转成css
console.log(styleText)

也可以加载原始图片路径:

javascript 复制代码
import imageUrl from "raw:~/assets/image.png"
 
console.log(imageUrl) // chrome-extension://<extension-id>/image.<hashA>.png

也可以加载base64格式的图片:

javascript 复制代码
import iconBase64 from "data-base64:~/assets/icon.png"
 
console.log(iconBase64) // data:image/png;base64,etc...

我们这个使用setIcon动态设置图标的时候,只能使用imageData的格式,因为原始图片路径和base64格式的都不行,所以需要将base64/图片路径格式的转为imageData格式的才可以:

javascript 复制代码
import someImage from 'data-base64:~assets/icon.png'

// set custom icon
    const setPngIcon = () => {
        var img = new Image()
        img.onload = function () {
            const canvas = new OffscreenCanvas(16, 16)
            const context = canvas.getContext('2d')
            context.drawImage(img, 0, 0, 16, 16)
            const imageData = context.getImageData(0, 0, 16, 16)
            chrome.action.setIcon({ imageData: imageData }, () => {
                console.log('set icon callback')
            })
        }
        img.src = someImage
    }

这样设置完就可以修改了:

图标也更换了:

更换后的图标:

相关推荐
靓仔建3 小时前
Vue3导入组件出错does not provide an export named ‘user_setting‘ (at index.vue:180:10)
开发语言·前端·typescript
EnoYao3 小时前
我写了一个团队体检报告 Skill,把摸鱼的同事扒出来了😅
前端·javascript
梁正雄3 小时前
Python前端-2-css练习
前端·css·python
清汤饺子3 小时前
用 Cursor 半年了,效率还是没提升?是因为你没用对这 7 个功能
前端·后端·cursor
蓝莓味的口香糖4 小时前
【vue3】组件的批量全局注册
前端·javascript·vue.js
wefly20174 小时前
开发者效率神器!jsontop.cn一站式工具集,覆盖开发全流程高频需求
前端·后端·python·django·flask·前端开发工具·后端开发工具
独泪了无痕4 小时前
自动导入 AutoImport:告别手动引入依赖,优化Vue3开发体验
前端·vue.js·typescript
GDAL5 小时前
MANIFEST.in简介
linux·服务器·前端·python
XPoet5 小时前
AI 编程工程化:Command——给你的 AI 员工编一套操作手册
前端·后端·ai编程
C_心欲无痕5 小时前
前端实现文件下载的完整流程
前端·状态模式