提交数据至Google Sheets后通过Google Apps Script实现URL重定向
实现方案
你原来使用ContentService.createTextOutput返回文本/JSON的逻辑本身不支持页面跳转,要实现提交后跳转,需要替换返回逻辑为HtmlService输出带前端跳转脚本的页面,具体修改如下:
修改后的完整代码
const sheetName = 'Sheet1' const scriptProp = PropertiesService.getScriptProperties() // 替换为你需要跳转的目标页面地址 const REDIRECT_URL = "填写你的目标跳转URL" function initialSetup () { const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet() scriptProp.setProperty('key', activeSpreadsheet.getId()) } function doPost (e) { const lock = LockService.getScriptLock() lock.tryLock(10000) try { const doc = SpreadsheetApp.openById(scriptProp.getProperty('key')) const sheet = doc.getSheetByName(sheetName) const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0] const nextRow = sheet.getLastRow() + 1 const newRow = headers.map(function(header) { return header === 'Date' ? new Date() : e.parameter[header] }) sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]) // 数据写入完成后执行跳转 return redirect() } catch (err) { // 异常场景也可跳转至错误提示页,按需修改 return redirect() } finally { lock.releaseLock() } } // 跳转逻辑封装 function redirect() { return HtmlService.createHtmlOutput( `<script>window.top.location.href="${REDIRECT_URL}";</script>` ).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL) }
注意事项
- 如果你之前修改代码后跳转失效,大概率是漏加了
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)配置:当表单提交是在iframe内触发时,浏览器默认会拦截跨域框架的脚本执行,加上这个配置即可放行 doPost方法内只能返回一种类型的结果,要跳转就不能再返回ContentService生成的JSON/文本内容,如果需要传递提交状态,可以把参数拼接到跳转URL末尾,比如${REDIRECT_URL}?status=success&row=${nextRow},目标页面自行读取参数展示提示即可- 修改代码后需要重新部署Apps Script为网页应用,部署时权限选择「任何人(包括匿名用户)」可访问,使用新生成的部署地址作为表单提交地址,旧地址不会同步最新代码
内容的提问来源于stack exchange,提问作者btbuildthings
相关产品推荐
相关产品推荐

