google-apps-script - 如何在 AppScript 中从 html 获取数据到服务器端代码
问题描述
我已经搜索了几个小时,但找不到解决方案。我有一些 appscript 代码可以创建一个菜单并在谷歌文档中打开一个模式:
function showDialog() {
let ui = DocumentApp.getUi();
let html = HtmlService.createHtmlOutputFromFile("dialog");
ui.showModalDialog(html, "dtest");
}
function processForm() {
console.log("test123123123");
}
这有效,模式打开。
在模态中,我想提交一个表格。现在我只是在将 console.logs 提交到云记录器时调用一个测试函数。
<script>
// Prevent form from submitting
function preventFormSubmit() {
var forms = document.querySelectorAll("form");
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener("submit", function (event) {
event.preventDefault();
});
}
}
window.addEventListener("load", preventFormSubmit);
google.script.run.processForm();
</script>
这里的问题是函数 processForm() 没有被触发。
但是当我使用 doGet() 并将其部署为 webapp 时,它可以工作。
我怎样才能让它在谷歌文档中也能工作?我已经尝试遵循文档..但我无法让它工作。
提前感谢您对此的任何帮助。
解决方案
所以我发现了问题。我是用正确的帐户 A 登录到谷歌的。并提示输入,一切正常。在 chrome 中,我使用帐户 B 登录。似乎当您使用 htmlservice 时,它使用沙箱,并且它使用您登录 chrome 的用户,而不是您登录工作区的用户。所以访问被拒绝。在两个地方使用相同的用户来解决这个问题。
推荐阅读
- netcdf - 从 xarray 数据集创建 NetCDF 时经纬度错误
- rstudio - Rstudio:运行 R 代码的方法,但前提是之前的代码行成功?
- reactjs - 如何使 Link/NavLink 路径更短
- c++ - 在一个变量中保存两种不同的返回类型
- jenkins-pipeline - 如何将工件从一个仓库复制到另一个仓库
- java - 如何使用 SSHJ 实现 SSH 用户/密码认证
- tensorflow - convert tensorflow model to pb tensorflow
- android - ViewModel 中的 Kotliin Dagger 字段注入引发 Dagger/Binding 异常
- android - 如何删除片段的默认按钮?
- android - React Native 应用程序无法在 android 上编译,可能与 AndroidX 有关