我可以在本地或从其他平台部署 google 应用程序脚本项目吗?

时间:2020-12-31 12:22:06

标签: google-apps-script

我正在使用谷歌应用程序脚本创建一个网络应用程序。在这个应用程序中,我集成了谷歌登录作为一项功能。当我通过谷歌应用程序脚本 IDE 部署应用程序时,一切都很好,直到我按下“用谷歌登录”按钮,它给了我一个错误,说与 JavaScript 来源不匹配。当我尝试添加 JavaScript 源时,它不会接受它并说它无效或被禁止。当我尝试在本地执行此操作时,它运行良好(我将 JavaScript 源添加为我的本地主机),但其他功能(如将数据添加到电子表格)不起作用。我知道首先没有解决方案(当我通过 Google App Script IDE 部署应用程序时使用登录按钮),因为我已经对此进行了详尽的研究。所以,我想知道是否有另一种方式。就像另一个平台可以支持我项目的部署,意味着google登录和google电子表格交互没有问题。

1 个答案:

答案 0 :(得分:2)

出于安全原因,Google Apps Script 会将您的 HTML 服务 (see restrictions documentation) 沙箱化。对于内容服务,它每次执行时都会重定向到不同的域 (see documentation)。因此,您有两个选择:使用 Google Apps 脚本作为访问用户执行和获得静态站点托管。

1.使用 Google Apps 脚本

您可以在 Google Apps Script 中创建函数,然后在前端使用 google.script.run 调用它们,而不是在前端运行对 API 的调用。它还可以简化您的代码,因为所有 OAuth 都由 Google Apps 脚本处理。

// Google Apps Script side
function doSomething() {
 const ss = SpreadsheetApp.openByUrl('…')
 // […]
 return result
}

我会这样称呼它:

// Client side
function doWork() {
 google.script.run
   .withSuccessHandler(successCallback)
   .doSomething() // Function name in the backend
}

确保使用选项 Execute as: 和值为 User accessing the web app 部署应用程序,这样它就不会像您一样执行。

通过此设置,用户将被要求在打开页面之前授予所需的权限。

2.使用虚拟主机

第二种解决方案是寻找网络托管服务提供商。因为您似乎没有后端,所以它可以用于静态页面(有些是免费的)。这将为您提供一个稳定的 URL,并且应该与您的本地主机完全相同。

参考文献