24

Since I can't use chrome.extension.getURL() on a CSS file, how can I use @font-face with a local font file?

mattdlockyer
  • 6,984
  • 4
  • 40
  • 44
Tomás Senart
  • 1,403
  • 1
  • 12
  • 15

4 Answers4

46

Here is how to get local path in css:

body {
  background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
}

More about it here.

Chris Hunt
  • 3,840
  • 3
  • 30
  • 46
serg
  • 109,619
  • 77
  • 317
  • 330
  • There is a bug on some Chrome versions which prevents this from working. The quick fix: Use your extension id hardcoded instead of "__MSG_@@extension_id__". The bummer is that when testing locally it won't work. – Tomás Senart Feb 28 '11 at 22:20
  • 13
    Don't forget to add fonts to https://developer.chrome.com/dev/extensions/manifest.html#web_accessible_resources !! – Aleksandr Motsjonov May 31 '13 at 18:01
24

This solution finally worked for me:

It injects a style node into the document of the content script.

And for Font Awesome, you only need the .woff src for Chrome.

Adding @font-face stylesheet rules to chrome extension

My code:

var fa = document.createElement('style');
    fa.type = 'text/css';
    fa.textContent = '@font-face { font-family: FontAwesome; src: url("'
        + chrome.extension.getURL('lib/fa/fonts/fontawesome-webfont.woff?v=4.0.3')
        + '"); }';
document.head.appendChild(fa);

In your manifest:

"css":[
    "lib/fa/css/font-awesome.min.css",
    ...
    ]

"web_accessible_resources":[
    "lib/fa/fonts/*",
    ...
    ]
Community
  • 1
  • 1
mattdlockyer
  • 6,984
  • 4
  • 40
  • 44
-2

Old question, but this I think is the best solution:

Firefox extension custom fonts

It applies equally for chrome extensions because rather than pointing to a font file, you're including the base64 encoded version of the font right in the CSS.

Community
  • 1
  • 1
Tyler Biscoe
  • 2,322
  • 3
  • 20
  • 33
-3

Just use a relative URL. It's simpler, cleaner, and is The Right Thing To Do™:

@font-face {
    font-family: 'FontAwesome';
    src: url('../font/fontawesome-webfont.eot');
}

I know this question is old but it's a top result on Google and the accepted answer is inefficient.

EDIT: It seems that others are getting mixed results for this. I should mention that it probably doesn't work when used in Content Scripts. I've tested this in Popup Scripts and it works fine.

matpie
  • 17,033
  • 9
  • 61
  • 82