@font-face шрифты работают только на своем домене
Я пытаюсь создать тип репозитория шрифтов для использования на моих сайтах, так что я могу вызвать любой шрифт в репозитории в моем css без каких-либо других настроек. Для этого я создал поддомен, на котором я разместил папки для каждого шрифта в репозитории, который содержал различные типы файлов для каждого шрифта. Я также разместил css-файл под названием font-face.css в корне поддомена и заполнил его @font-face
объявления для каждого из шрифтов, шрифты связаны с абсолютной ссылкой так что они могут использоваться везде.
моя проблема заключается в том, что кажется, что я могу использовать шрифты только на том поддомене, где они расположены, на других моих сайтах шрифт не отображается. С помощью firebug я определил, что шрифт-лицо.файл css был успешно связан и загружен. Так почему же шрифт не правильно загружается? Есть ли защита на файлах шрифтов или что-то еще? Я использую все шрифты, с которыми мне должно быть разрешено это делать, поэтому я не понимаю, почему это происходит. Может быть, это это проблема apache, но я могу скачать шрифт просто отлично, когда я ссылаюсь на него.
О, и просто чтобы уточнить, я не нарушаю никаких авторских прав, устанавливая это, все шрифты, которые я использую, лицензированы, чтобы разрешить такие вещи. Однако я хотел бы настроить таким образом, что только я могу иметь доступ к этому хранилищу шрифтов, но это другой проект.
4 ответа:
это потому, что Firefox (из вашего упоминания о Firebug) думает, что междоменное, даже поддоменное, встраивание веб-шрифтов-плохая идея.
вы можете убедить его загрузить шрифты из вашего поддомена, добавив Это на верхний уровень
.htaccess
файл поддомена, в котором обслуживаются ваши шрифты (обновлен для адаптации кода из того же файла в HTML5 шаблон):<FilesMatch "\.(ttf|ttc|otf|eot|woff)$"> <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule> </FilesMatch>
в ответ на это:
однако я хотел бы настроить a так что только я могу иметь доступ к этому хранилищу шрифтов, но это другой проект.
The спецификация W3C для
Access-Control-Allow-Origin
не говорит ничего больше, чем либо подстановочный знак"*"
или конкретный домен. До сих пор, я нашел это так ответ что предполагает проверкуOrigin
заголовок, но я думаю, что это заголовок только для Firefox. Я не уверен в других браузерах (им даже не нужен.htaccess
трюк выше для междоменных веб-шрифтов, чтобы работа.)
другой способ исправить это в Firefox-это встроить шрифт непосредственно в файл css с помощью кодировки base64. Особенно отличный, если у вас нет доступа к некоторым из упомянутых выше конфигураций.
вы можете создать необходимый код на fontsquirrel.com: в генераторе font-face Kit выберите режим expert, прокрутите вниз и выберите Base64 Encode в разделе Параметры CSS - загруженный набор шрифтов будет готов к подключению и воспроизведению.
Это также имеет преимущество fringe в сокращении времени загрузки страницы, поскольку для этого требуется на один http-запрос меньше.
Если вы не хотите, чтобы ресурсы из всех доменов, но только с поддомена вашего сайта, вы должны сделать это так:
# Allow font, js and css to be loaded from subdomain SetEnvIf Origin "http(s)?://(.+\.)?(example\.com)$" ORIGIN_DOMAIN= <IfModule mod_headers.c> <FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff|js|png|jpg|jpeg|gif)$"> Header set Access-Control-Allow-Origin %{ORIGIN_DOMAIN}e env=ORIGIN_DOMAIN </FilesMatch> </IfModule>
Источник:http://www.webspeaks.in/2015/01/wordpress-allow-cross-domain-resources.html
используя http://www.fontsquirrel.com/fontface/generator в режиме "эксперт" и при выборе base64 в качестве опции возвращается таблица стилей.css с необходимыми base64 кодированными данными для использования в нашей таблице стилей. Кажется, работает во всех браузерах, которые мы тестировали, кроме IE8.
мы сталкиваемся с этой проблемой чаще всего при применении тем к сторонним инструментам, таким как Salsa petition, где мы вынуждены размещать шрифт.
Спасибо за помощь всем!