Firefox @font-face с локальным файлом-загружаемый шрифт: ошибка загрузки

у меня проблема с использованием шрифта, доступ к которому осуществляется через относительный URL.

@font-face {
    font-family: 'ElegantIcons';
    src:url('../src_main/fonts/ElegantIcons.eot');
    src:url('../src_main/fonts/ElegantIcons.ttf') format('truetype'),
        url('../src_main/fonts/ElegantIcons.svg#ElegantIcons') format('svg'),
        url('../src_main/fonts/ElegantIcons.woff') format('woff'),
        url('../src_main/fonts/ElegantIcons.eot?#iefix') format('embedded-opentype');
    font-weight: normal;
    font-style: normal;
}

когда я получить доступ к веб-странице, шрифт не работает и в консоли я получаю это:

downloadable font: download failed (font-family: "ElegantIcons" style:normal weight:normal stretch:normal src index:1): status=2147500037
source: file:///...snipped.../src_main/fonts/ElegantIcons.woff @ file:///...snipped.../src_poke/fonts-style.css

доступ к файлу путем копирования / вставки URL в адресную строку браузера показывает, что это правильный URL, поскольку я могу загрузить шрифт.

3 ответов


наконечник шляпы к ответу Джонатана Кью на соответствующая запись mozilla bugzilla:

Я считаю, что это работает, как задумано. AIUI, проблема здесь в том, что для страницы, загруженной из файла: / / URI, только файлы в (или ниже) одним и тем же каталогом файловой системы считаются " одно и то же происхождение", и поэтому помещаем шрифт в другое поддерево (../ font/) означает это будет заблокирован ограничениями политики безопасности.

вы можете расслабиться установив безопасность.файлури.strict_origin_policy для false в about: config, но так как это дает доступ к странице вся локальная файловая система, это то, что нужно использовать с осторожностью.

чтобы подвести итог, "исправить" без перестановки файлов:

  • открыть about: config
  • Set security.fileuri.strict_origin_policy в false
  • остерегайтесь последствий для безопасности

лучший способ, однако, убедиться, что любые ресурсы доступен без резервного копирования файловой системы.

Примечание: исходная политика рассчитывается на основе html, а не css-файла! Таким образом, файл шрифта, кроме файла css, может не работать, что очень запутанно. (по крайней мере, это то, что я думал, было в случае с Firefox!)

дополнения:

eradman комментарии:

это наоборот: относительные пути относительно файла CSS.

chrylis отвечает:

вы думаете, что, но фактический код в Firefox, похоже, не согласен.


@CharlesGoodwin @eradman на самом деле оба утверждения о происхождении кажутся истинными, за исключением того, что они, вероятно, говорят о двух разных вещах: проверка одного и того же происхождения основана на исходном HTML-файле, в то время как относительные URL-адреса для граней шрифта разрешены относительно CSS-файла, содержащего правило @font-face.

кроме того, исходный HTML-файл не является файлом, использующим шрифт. У меня есть следующая локальная файловая структура.

<base-directory>/index.htm
<base-directory>/ARPLS/toc.htm
<base-directory>/dcommon/css/fonts.css
<base-directory>/dcommon/fonts/myfont.woff

шрифты.в CSS ссылки myfont.в CSS via URL-адрес(../шрифты/сайт myfont.woff) и toc.НТМ ссылка шрифты.в CSS via . .НТМ имеет гиперссылку на toc.НТМ. Теперь, я закладки обоих .НТМ и toc.НТМ. Если я использую .НТМ закладка, шрифт отображается правильно. Если я использую toc.НТМ закладки не удается загрузить шрифт. Я думаю, это потому, что myfont.woff находится в подкаталоге каталога, содержащего .НТМ но не из каталога, содержащего toc.НТМ.

наблюдается в Firefox 38.6.


попробуйте добавить это в свой интернет.config

<system.webServer>
<staticContent>
  <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
  <remove fileExtension=".woff" />
  <remove fileExtension=".woff2" />
  <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
  <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
</staticContent>