You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Google Apps Script Web应用中使用导入字体遇CORS异常问题

解决Google Apps Script Web应用中自定义字体的CORS异常问题

嗨,我来帮你搞定这个CORS的麻烦!你之前用Google Docs导入图片没问题,但字体触发CORS,核心原因是浏览器对字体资源的跨域访问有严格的CORS限制,而Google Drive直接返回的文件链接并没有配置允许你Web应用域名的CORS响应头,所以被拦截了。

给你几个可行的解决方案,按推荐程度排序:

方案1:用Google Apps Script代理字体文件(最稳妥)

这是绕开CORS最可靠的方式,通过Apps Script作为中间层返回字体文件,这样响应头可以由我们控制:

  1. 在你的Apps Script项目里新增一个函数:
function doGet(e) {
  // 替换成你的字体文件ID
  const fontFileId = "1r2a5nd6om75url39428dfju4"; 
  try {
    const file = DriveApp.getFileById(fontFileId);
    const blob = file.getBlob();
    // 返回字体内容并设置正确的MIME类型
    return ContentService.createTextOutput(blob.getDataAsString())
      .setMimeType(blob.getContentType());
  } catch (err) {
    return ContentService.createTextOutput("无法加载字体:" + err.message)
      .setMimeType(ContentService.MimeType.TEXT);
  }
}
  1. 部署这个脚本为Web应用:

    • 点击右上角的「部署」→「新部署」
    • 类型选择「Web应用」
    • 执行权限选「我自己」(如果你的Web应用是公开的,访问权限选「任何人,甚至匿名」)
    • 点击「部署」,复制生成的Web应用URL
  2. 把CSS里的字体URL替换成这个部署后的URL:

@font-face { 
  font-family: MyCustomFont; 
  src: url("你的Apps Script Web应用URL"); 
}
#headBanner { 
  font-family: MyCustomFont; 
}

方案2:检查Drive文件的共享设置(辅助步骤)

即使使用代理,也确保你的字体文件在Drive里的共享设置是「任何人有查看权限」,不然Apps Script可能无法读取文件。不过这一步单独做还是解决不了CORS,必须配合代理。

为什么图片没问题但字体不行?

浏览器对不同资源的CORS策略不一样:图片属于「被动资源」,除非你把它用于Canvas等需要读写的场景,否则浏览器不会严格校验CORS;但字体属于「可执行资源」(会影响页面渲染逻辑),浏览器会强制检查跨域请求的CORS头,所以直接用Drive URL会触发异常。

内容的提问来源于stack exchange,提问作者Daccache

火山引擎 最新活动