Hsüan's Blog

2019-01-18

Chrome extension 讓 content script 加載 css

content script 載入 css

方法1 - 直接載 cdn 檔案

  • Load cdn css directly from content script

    function loadCss(href) {
      const link = document.createElement('link')
      link.rel = 'stylesheet'
      link.href = href
      document.getElementsByTagName('head')[0].appendChild(link)
    }
    loadCss(
      'https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons',
    )

缺點

  • 若是該網站 csp 很嚴格,會被擋。

方法2 - Extension 本地加載

打包到 extension 後,再用 script 載入。

  • 把檔案放到專案下,以 mdi 為例

    $ tree -d mdi
    mdi
    ├── LICENSE
    ├── fonts
    │   ├── MaterialIcons-Regular.eot
    │   ├── MaterialIcons-Regular.ttf
    │   ├── MaterialIcons-Regular.woff
    │   └── MaterialIcons-Regular.woff2
    ├── material-design-icons.css
    └── material-design-icons.css.map
  • Add paths to manifest.json

    {
      ...
      "web_accessible_resources": [
        "mdi/*"
      ]
    }
  • load the css by content script

    function loadCss(href) {
      const link = document.createElement('link')
      link.rel = 'stylesheet'
      link.href = href
      document.getElementsByTagName('head')[0].appendChild(link)
    }
    function loadExtCss(path) {
      loadCss(browser.runtime.getURL(path))
    }
    loadExtCss('/mdi/material-design-icons.css')

缺點

  • 相較於 cdn 方法,包會變大

© 2019 ~ 2024 Hsüan, Powered by Gatsby, Theme Material UI