动态加载字体。Javascript:No';访问控制允许原点';标题已存在
我正在尝试使用此函数动态加载字体动态加载字体。Javascript:No';访问控制允许原点';标题已存在,javascript,nginx,cors,Javascript,Nginx,Cors,我正在尝试使用此函数动态加载字体 ... // Load Font function loadFont(url, fontName) { if (!isFontAvailable(fontName)) { let fontObject = new FontFace(fontName, 'url(' + url + ')'); fontObject.withCredentials = true;
...
// 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.log("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作为我的web服务器。我将这段代码添加到配置文件中
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
如您所见,访问控制允许原点就在那里。但我不知道为什么错误会说:“不存在‘访问控制允许来源’标题”
顺便说一下,我尝试了其他方法来加载我的字体,如下所示:
但也没用,我是说没什么变化。当然,我编辑了一点JSFIDLE,这是另一个故事
CORS策略已阻止从源“null”访问“”处的字体:请求的资源上不存在“Access Control Allow origin”标头
其中的“originnull
”表示加载字体的页面不是从HTTP URL加载的(例如,HTTP://
或https://
)。通常这意味着您通过在文件资源管理器或类似工具中双击文件://
URL来加载页面。一些浏览器(如Chrome)拒绝允许源null
页面访问任何跨源、标题或无标题的内容。Originnull
与任何东西都不匹配,甚至不匹配*
(根据他们的推理)
相反,不要从
文件://
URL加载页面。使用http://
或https://
URL(可能是访问本地运行的web服务器的URL)。我必须清除浏览器缓存。多亏了@Quentin,问题解决了。您是否尝试过清除浏览器缓存?我希望字体(包括缺少CORS权限)被缓存。