Динамическая загрузка шрифтов. Javascript: отсутствует заголовок «Access-Control-Allow-Origin»

Я пытаюсь динамически загружать шрифты с помощью этой функции.

...
    // Load Font
    function loadFont(url, fontName) {
        if (!isFontAvailable(fontName)) {
            let fontObject = new FontFace(fontName, 'url(' + url + ')');
            fontObject.withCredentials = true;
            fontObject.load().then(function (loaded_face) {
                document.fonts.add(loaded_face);
                document.body.style.fontFamily = fontName + ', Arial';
            }).catch(function (error) {
                console.info("loadFont: " + error);
            });
        }
    }

Но я получаю следующие ошибки:

Access to font at 'http://localhost/fonts/iransans/IRANSansLight.ttf' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
IRANSansLight.ttf:1 Failed to load resource: net::ERR_FAILED

Я использую Nginx в качестве веб-сервера. Я добавил этот блок кода в свой файл конфигурации.

location ~* "^.*?\.(eot)|(ttf)|(woff)$" {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Expose-Headers true;
}

Я также проверил заголовки ответов:

/var/www$ curl -I http://localhost/fonts/iransans/IRANSansLight.ttf
HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Mon, 24 Jun 2019 16:50:21 GMT
Content-Type: application/octet-stream
Content-Length: 59968
Last-Modified: Sun, 03 Mar 2019 20:30:49 GMT
Connection: keep-alive
ETag: "5c7c3979-ea40"
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: true
Accept-Ranges: bytes

Как видите, Access-Control-Allow-Origin прямо здесь. Но я не знаю, почему ошибка говорит: «Отсутствует заголовок« Access-Control-Allow-Origin »».

Кстати, я пробовал другие способы загрузки своих шрифтов, например этот: http://jsfiddle.net/zejz2tkp/1/ Но тоже не сработало, я имею в виду, что ничего не изменилось. Конечно, я немного отредактировал этот JsFiddle, и это уже совсем другая история.

Вы пробовали очистить кеш браузера? Я ожидаю, что шрифт (включая отсутствие разрешений CORS) будет кэширован.

Quentin 24.06.2019 18:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
972
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Access to font at 'http://localhost/fonts/iransans/IRANSansLight.ttf' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

«Происхождение null» означает, что страница, загружающая шрифт, загружается не с URL-адреса HTTP (например, http:// или https://). Обычно это означает, что вы загрузили страницу с URL-адреса file://, дважды щелкнув ее в проводнике или аналогичном устройстве. Некоторые браузеры (например, Chrome) отказываются разрешать страницам с источником null доступ к чему-либо с перекрестным происхождением, заголовками или без заголовков. Происхождение null ничему не соответствует, даже * (по их рассуждениям).

Вместо этого не загружайте страницу с URL-адреса file://. Используйте URL-адрес http:// или https:// (возможно, для доступа к локально работающему веб-серверу).

Ответ принят как подходящий

Пришлось очистить кеш браузера. Благодаря @Quentin это решено.

Другие вопросы по теме