为什么HTML中调用google.script.run方法无法执行.gs后端代码
问题根因
google.script.run属于异步调用,发起请求后不会等待服务端代码执行完成就会继续执行后续代码。你当前的逻辑是调用saveImage后立刻执行google.script.host.close()关闭窗口,未完成的异步请求会被直接中断,导致服务端的saveImage函数根本没有被触发执行。
修复方案
修改HTML文件中的renderSignature函数,通过withSuccessHandler绑定回调,等服务端saveImage执行成功后再关闭窗口,同时添加错误处理逻辑方便排查问题:
function renderSignature(){ $("#rendered").attr("src",$('#signature').jSignature('getData','default')); var bytes = document.getElementById('rendered').src; console.log(bytes); google.script.run .withSuccessHandler(function(){ // 服务端执行成功后再关闭窗口 console.log("save success"); google.script.host.close(); }) .withFailureHandler(function(err){ // 打印错误信息方便排查 console.log("save error: ", err); alert("签名保存失败:" + err); }) .saveImage(bytes); console.log("save request sent"); }
其他注意事项
- 你的HTML末尾多了一个冗余的
</script>标签,建议删除避免潜在解析问题 - 可以给服务端
saveImage函数添加执行日志,方便后续排查执行状态 - 确认你使用的Google账号对ID为
1jEC8R7tK_XTTRcjOboqq-MqW6Pkz_CE2的文件夹有编辑权限,文件夹如果被删除、权限变更或者ID修改也会导致保存失败 - 如果需要后续使用签名链接,可以修改
saveImage函数把newSignatureLink写入对应单元格存储
内容的提问来源于stack exchange,提问作者dorstr999
相关产品推荐
相关产品推荐

