部署的Google Sheet转JSON App Script遇CORS错误,如何开启CORS?
解决Google App Script部署API在Kumu.io中的CORS错误
方案1:用JSONP绕过CORS限制
你的代码已经原生支持JSONP,只需在API请求URL末尾添加&callback=任意回调名称即可,示例URL:
https://script.google.com/macros/s/AKfycbymN0Wkfl-Lp4n0kD2L1DXmY4BbZhi8CvoB8nW2pguvelXhqAhRo4YQuYquS5Mv_FU/exec?id=12ygFGlEbqosGDj_4VSg6pzTjnHn58XuLAtmMpkdoUzM&sheet=Elements&header=1&startRow=2&callback=kumuCallback
JSONP通过动态加载脚本的方式避开浏览器CORS检查,Kumu.io通常支持该格式。
方案2:修改代码添加CORS响应头
由于ContentService无法自定义HTTP头,改用HtmlService返回数据并配置CORS规则,替换原doGet函数:
function doGet(request) { // 保留原有参数获取、数据解析逻辑 var sheetKey = request.parameters.id; var sheetName = request.parameters.sheet; var headerRow = request.parameters.header; var startRow = request.parameters.startRow; var spreadsheet = SpreadsheetApp.openById(sheetKey); var keys = getHeaderRowKeys_(spreadsheet, sheetName, headerRow); var data = readData_(spreadsheet, sheetName, keys, startRow); data = data.filter(function(entry) { var matches = true; for (var k in keys) { var key = keys[k].replace(/\s+/g, '_'); var searchTerm = request.parameters[key]; if (searchTerm != undefined) matches = matches && ("" + entry[key] == searchTerm); } return matches; }); var response = JSON.stringify({ elements: data }); var headers = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, OPTIONS", "Access-Control-Allow-Headers": "Content-Type" }; // 处理OPTIONS预检请求 if (request.method === 'OPTIONS') { return HtmlService.createHtmlOutput('').setHeaders(headers); } // 返回JSON数据并设置CORS头 var output = HtmlService.createHtmlOutput(response); output.addMetaTag('Content-Type', 'application/json'); return output.setHeaders(headers); }
修改后重新部署Web App即可。
方案3:检查Web App部署权限
重新部署时必须确认以下设置:
- 执行权限:选择「Me (你的邮箱地址)」
- 谁可以访问:选择「Anyone, even anonymous」
若权限范围过窄(如仅限自己或内部组织),Kumu.io服务器无法正常访问API,也会触发类似CORS的错误提示。
内容的提问来源于stack exchange,提问作者Einarr
相关产品推荐
相关产品推荐

