如何在Chrome扩展程序中使用FontAwesome?

15

我正在开发一个Google Chrome扩展,它显示在特定的网站上。我想在我的Chrome扩展中使用Fontawesome。

当我尝试加载字体时,会发生错误GET chrome-extension://invalid/ net::ERR_FAILED

在样式表中,使用@font-face包含了Web字体,像这样。

src: url('chrome-extension://__MSG_@@extension_id__/Fonts/fontawesome-webfont.eot?v=4.7.0');

我也试图直接嵌入我的扩展ID,但是它并没有起作用。

我的manifest.json文件:

"web_accessible_resources": ["Fonts/*.*", "*.ttf", "*.eot", "*.svg", "*.woff", "*.woff2"],

如何解决这个问题?


你是否像创建 npm 项目一样创建了它?你有 package.json 文件吗? - Nuwan Karunarathna
@NuwanKarunarathna 你在开玩笑吗?他正在制作Chrome扩展,而不是JavaScript独立项目... - Noctumsempra
2
@Noctumsempra 那又怎样?你认为Chrome扩展程序不能有package.json文件或者它不能是一个独立的JavaScript项目吗?你开发过多少个Chrome扩展程序? - Nuwan Karunarathna
8个回答

16

我想对@Thomas Kekeisen的答案进行补充,提供FontAwesome版本5(当前版本为5.13.0)的更新答案。
另外,我希望尽可能保持简洁,因此:

  1. 我将仅引用woff2因为没有使用其他格式的理由
  2. 我将仅引用FontAwesome的regular样式(这是他们的5种样式之一)。

因此,如果您使用的是woff2以外的格式或regular以外的样式,请以相同的方式应用以下步骤。


所以,为了在Chrome扩展中使用FontAwesome,请按照以下步骤操作:

  1. 下载FontAwesome .zip文件(这是一个直接下载链接,您可以访问下载页面这里)。
  2. 解压.zip文件,只提取所需的内容,例如:

    (a) css/fontawesome.min.css
    (b) css/regular.min.css
    (c) webfonts/fa-regular-400.woff2

    注意:如果您使用css/all.min.js,它将替换(a)和(b)。

  3. 可选,可以让我们的生活更轻松

    在Chrome扩展根文件夹下创建csswebfonts文件夹以模仿FontAwesome结构,并将上述文件移动到这些文件夹中。
    您的文件夹结构应如下所示:

    your-extension
     |- css
       |- fontawesome.min.css
       |- regular.min.css
     |- webfonts
       |- fa-regular-400.woff2
    
  4. css/regular.min.css 文件中,覆盖(是的,只需要覆盖)@font-face 媒体样式,使用以下代码:

    @font-face {
      font-family: "Font Awesome 5 Free";
      font-style: normal;
      font-weight: 400;
      font-display:block;
      src: url("chrome-extension://__MSG_@@extension_id__/webfonts/fa-regular-400.woff2");
    }
    

    注意:我再次提醒,我将“正常”样式作为示例,请确保在使用其他样式时,@font-face.src属性具有正确的值。

  5. 将您的manifest.json更新如下:

  6. {
      ...
      "content_scripts": [{
         ...
         "css": [
            "css/fontawesome.min.css",
            "css/regular.min.css",
         ]
         ...
      }],
      ...
      "web_accessible_resources": [
         ...
        "css/fontawesome.min.css",
        "css/regular.min.css",
        "webfonts/fa-regular-400.woff2", // or: "webfonts/*" 
      ]
    }
    

    注意:需要将.css路径添加到"content_scripts""web_accessible_resources"中。


2
非常感谢您提供如此有用和详细的帖子。我想补充一点,根据我目前的测试,manifest文件中的web_accessible_resources部分不需要包含.css文件。 - gbro3n
5
我试图为弹出窗口设置fontAwesome,因此我只下载了all.min.css和所有.woff2文件(目前的版本是fontawesome-5.15.2 - webfonts文件夹中有3个文件)。我将它们放在myFolder/css/all.min.css和myFolder/webfonts/ 3 .woff2文件夹中。然后在我的弹出窗口中,我链接了all.min.css文件的位置: <link href="/myFolder/css/all.min.css" rel="stylesheet"> 如果你只想在弹出窗口中使用它,那么你不需要在manifest.json中添加任何内容。更多解释,请参见文档 - GoodOldGuy
@GoodOldGuy,请将您的评论作为答案发布。您的两个答案都涵盖了所有方面! - César Rodriguez

9
这是我如何在Chrome扩展中获取FontAwesome (4.7)本地(离线)实例的方法:
1)下载字体文件(FontAwesome.otffontawesome-webfont.eotfontawesome-webfont.svgfontawesome-webfont.ttffontawesome-webfont.wofffontawesome-webfont.woff2),并保存在fonts/目录下。
2)下载font-awesome.min.css文件,并将该文件中的所有URL替换为chrome-extension://__MSG_@@extension_id__/fonts/[...]
3)按照以下方式更新您的manifest.json文件:
{
    ...
    "content_scripts":          [
        {
           ...
            "css":        [
                "css/font-awesome.min.css",
                ...
            ]
            ...
        }
    ],
    ...
    "web_accessible_resources": [
        ...
        "fonts/FontAwesome.otf",
        "fonts/fontawesome-webfont.eot",
        "fonts/fontawesome-webfont.svg",
        "fonts/fontawesome-webfont.ttf",
        "fonts/fontawesome-webfont.woff",
        "fonts/fontawesome-webfont.woff2",
    ]
}

这使得fontawesome可以离线使用(无需任何fontawesome-js)。

我在这里找到了fa字体的下载链接:https://devdreamz.com/question/248929-how-to-use-fontawesome-in-chrome-extension 或者直接访问:https://fontawesome.com/docs/web/setup/host-yourself/webfonts - Wim den Herder

3

以上方法均无效。可能是因为这些答案过时了,它们参考的是较老版本的 Font Awesome。 当我发现 Font Awesome 6 的官方网站上推荐的方法 后,问题得到解决。

简单来说:

<link href="/your-path-to-fontawesome/css/all.css" rel="stylesheet">

注意:一定要插入正确的路径。

获取文件路径的一些好教程:


应该是顶级评论,感谢@jock。 - J.C

3
如果您需要在Chrome扩展程序的内容脚本(而不是popup.html)中使用Font Awesome,可以按照以下步骤操作:
1. 下载 https://use.fontawesome.com/840a321d95.js,并将其重命名为 fontawesome.js。
2. 将该文件放入您的扩展程序目录中,如@wesdotcool的回答所述。
3. 然后,在 manifest.json 中添加以下内容:
{
    "manifest_version": 2,
    "content_scripts": [
        {
            "js": ["fontawesome.js"]
        }
    ],
}

当扩展程序加载到twitter.com上时,它无法正常工作。我在控制台中看到的错误是 Refused to load the font 'https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff' because it violates the following Content Security Policy directive: "font-src https://twitter.com https://*.twimg.com data: https://ton.twitter.com https://fonts.gstatic.com https://maxcdn.bootstrapcdn.com https://netdna.bootstrapcdn.com 'self'"。 - void

2
最简单但可怕的方式是下载Fontawesome并直接包含它。
curl -o fontawesome.js "https://use.fontawesome.com/840a321d95.js"

然后将其添加到您需要的位置。

<script src="fontawesome.js"></script> 

{btsdaf} - stephenspann
当扩展程序加载到twitter.com上时,它无法正常工作。我在控制台中看到的错误是 Refused to load the font 'https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff' because it violates the following Content Security Policy directive: "font-src https://twitter.com https://*.twimg.com data: https://ton.twitter.com https://fonts.gstatic.com https://maxcdn.bootstrapcdn.com https://netdna.bootstrapcdn.com 'self'"。 - void
我认为它已经不再起作用了,有人可以更新一下吗? - Enrique

1

我成功地在我的Chrome扩展程序中使用了Sass来使用Font Awesome。

使用Sass集成FontAwesome 5.11.x到您的Chrome扩展程序的步骤:

  1. 前往Font Awesome下载页面下载网页专用文件的本地副本
  2. SCSS文件夹复制到您的样式文件夹中。
  3. 将整个webfonts文件夹复制到资产文件夹中。
  4. 打开font awesome的scss/variables.scss文件,并编辑$fa-font-path变量,使其指向您放置webfonts文件夹的位置。

您需要使用chrome-extension://__MSG_@@extension_id__/来查找扩展程序文件夹的路径。

对于我来说,字体文件的路径是- extension/chrome/assets/font-awesome, 所以我将$fa-font-path更改为chrome-extension://__MSG_@@extension_id__/assets/font-awesome

  1. @import "scss/fontawesome.scss"添加到您的主SCSS文件中来导入Font Awesome。此外,在您的主SCSS文件中导入一个或多个样式@import "scss/solid.scss"。如果使用常规字体,则导入regular.scss

执行您的Web扩展程序,然后您应该能够使用Font Awesome图标。


0
将以下行添加到您的清单中:"content_security_policy": "script-src 'self' https://kit.fontawesome.com/[FILE_NAME].js; object-src 'self'" 刷新您的扩展程序。
编辑:这种方法似乎不适用于Manifest V3。

如果你能解释为什么这样做会解决问题,那会更好。 - undefined

0
我的使用情况如下,我正在向一个页面添加图标,而不是弹出窗口,这个页面上我正在生成div、按钮、文本和其他东西。
最终,我通过将包含fontawesome.js的

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接