如何在Google Apps Script表单提交后重定向到客户端HTML并传序列号?
解决方案
1. 修改Google Apps Script的Code.js
将原返回GAS托管页面的逻辑,改为返回重定向响应,把生成的序列号作为URL参数传递到客户端成功页面:
let MySheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/xxx"); let Demo2Sheet = MySheet.getSheetByName("Sheet1"); function doPost(e) { let Demo2 = e.parameter; var currentDate = new Date(); var month = currentDate.toLocaleString("default", { month: "short" }); var year = currentDate.getFullYear().toString().substr(-2); var serialNumber = "S" + month + year; Demo2Sheet.appendRow([Demo2.name, Demo2.email]); // 替换为你的客户端成功页面路径(和index.html同层级,比如"./success.html") const successUrl = "./success.html?serial=" + encodeURIComponent(serialNumber); // 通过JS跳转避免跨域限制 return ContentService.createTextOutput("<script>window.location.href='" + successUrl + "';</script>") .setMimeType(ContentService.MimeType.HTML); }
说明:encodeURIComponent用于处理序列号中的特殊字符,防止URL解析出错;若客户端页面和GAS部署域名不同,需在GAS部署设置中允许跨域请求,并将访问权限设为"任何人,甚至匿名"。
2. 创建客户端success.html(与index.html同层级)
新建同目录的success.html,添加代码读取URL参数并展示序列号:
<!DOCTYPE html> <html> <head> <title>提交成功</title> </head> <body> <h1>提交成功!</h1> <p>您的序列号:<span id="serialNumber"></span></p> <script> // 从URL参数中提取序列号 const urlParams = new URLSearchParams(window.location.search); const serial = urlParams.get('serial'); document.getElementById('serialNumber').textContent = serial || '未获取到序列号'; </script> </body> </html>
可选优化:生成唯一序列号
当前序列号会在同一天重复,若需要唯一标识,可结合工作表行数生成:
// 替换原序列号生成代码 var rowNum = Demo2Sheet.getLastRow() + 1; // 新行的行号 var serialNumber = "S" + month + year + rowNum;
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

