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

使用ant-design/cssinjs向plasmo浏览器插件的内容脚本content中注入antd的ui组件样式

之前写过一篇文章用来向content内容脚本注入antd的ui:https://xiaoshen.blog.csdn.net/article/details/136418199,但是方法就是比较繁琐,需要将antd的样式拷贝出来,然后贴到一个单独的css样式文件中,然后引入到内容脚本中。但是细心的网友给出了一个评论,说官方有现成的引入方式,把我开心坏了,赶紧研究一下:https://github.com/PlasmoHQ/examples/blob/main/with-antd/content.tsx

环境准备

需要使用antd5.0以后的版本,并且需要单独使用GitHub - ant-design/cssinjs这个依赖库,需要先安装:

npm install @ant-design/cssinjsyarn add @ant-design/cssinjspnpm add @ant-design/cssinjs

引入到content

需要注意,先按部就班的使用官方给的demo走一遍比较安全:

import { StyleProvider } from "@ant-design/cssinjs"
import Button from "antd/es/button"
import antdResetCssText from "data-text:antd/dist/reset.css"
import type { PlasmoCSConfig, PlasmoGetShadowHostId } from "plasmo"import { ThemeProvider } from "~theme"export const config: PlasmoCSConfig = {matches: ["https://www.plasmo.com/*"]
}const HOST_ID = "engage-csui"export const getShadowHostId: PlasmoGetShadowHostId = () => HOST_IDexport const getStyle = () => {const style = document.createElement("style")style.textContent = antdResetCssTextreturn style
}const EngageOverlay = () => (<ThemeProvider><StyleProvider container={document.getElementById(HOST_ID).shadowRoot}><Button type="primary">Engage</Button></StyleProvider></ThemeProvider>
)export default EngageOverlay

注意:

里面引入了这几个比较重要的内容

import { StyleProvider } from "@ant-design/cssinjs"
import Button from "antd/es/button"
import antdResetCssText from "data-text:antd/dist/reset.css"

import type { PlasmoCSConfig, PlasmoGetShadowHostId } from "plasmo"

StyleProvider: 样式提供器,用于将antd的css样式注入到组件上,一个提供器里面只能包裹一个组件。

Button: antd的按钮组件,

antdResetCssText: antd的css样式文件,文本形式,这个后面可以自己定义的css样式做加法。

PlasmoGetShadowHostId: 用于定位antd的元素

比如我这里真实使用场景:样式已经出来了

引发的问题

1.因为getStyle只能写一个,所以如果引入了antdResetCssText,自定义的css样式该如何引入?

可以在getStyle中做加法处理,比如我自己定义的css文件是cssText:

import cssText from 'data-text:~/contents/index.scss'
import antdResetCssText from 'data-text:antd/dist/reset.css'// load style file
export const getStyle = () => {const style = document.createElement('style')style.textContent = antdResetCssText + cssTextreturn style
}

2.StyleProvider下面可以一下包裹多个antd的组件吗?

不可以,只能一个一个包裹使用:

                   <StyleProvidercontainer={document.getElementById(HOST_ID).shadowRoot}><SelectdefaultValue={juejinCategory[0].category_id}style={{ width: 110 }}onChange={cateChange}options={cates}/></StyleProvider>

3.后面有问题再补充.......

http://www.lryc.cn/news/371950.html

相关文章:

  • 南京威雅学校:初中转轨国际化教育,她们打开了成长的另一种可能
  • Linux | 标准IO编程
  • 从ES的JVM配置起步思考JVM常见参数优化
  • milvus的GPU索引
  • CleanMyMac2024最新免费电脑Mac系统优化工具
  • catia/delmia的快捷图标模式最多12个
  • 磁盘性能概述与磁盘调度算法
  • chrome浏览器设置--disable-web-security解决跨域
  • Android中蓝牙设备的状态值管理
  • 关于ReactV18的页面跳转传参和接收
  • 南京观海微电子-----PCB设计怎样降低EMI
  • 黑苹果/Mac如何升级 Mac 新系统 Sequoia Beta 版
  • 2024年主流工单系统横向对比
  • 实用软件下载:Studio One最新安装包及详细安装教程
  • 网络安全练气篇——常见服务端口对应漏洞
  • WPF学习(3)--不同类通过接口实现同种方法
  • 体验版小程序访问不到后端接口请求失败问题解决方案
  • 【Linux文件篇】磁盘到用户空间:Linux文件系统架构全景
  • 数据分析-Excel基础函数的使用
  • 速盾的防护策略有哪些?
  • LabVIEW RT在非NI硬件上的应用与分析
  • 使用Python批量处理Excel的内容
  • k8s+pv+pvc+nas 数据持久化volumes使用
  • C++算法-青蛙跳台阶【面试】
  • px转rem插件postcss-plugin-px2rem使用方法(浏览器缩放页面自适应)
  • 批量文件重命名技巧:轻松替换删除文件夹名中的字母,实现高效文件管理新境界
  • windows设备/路由设备上ip地址如何查看、使用
  • 服务端⾼并发分布式结构演进之路
  • Stable Diffusion ProtoVisionXL大模型之艺术盛宴!
  • 浅谈golang字符编码