我正在使用谷歌应用程序脚本创建一个网络应用程序。在这个应用程序中,我集成了谷歌登录作为一项功能。当我通过谷歌应用程序脚本 IDE 部署应用程序时,一切都很好,直到我按下“用谷歌登录”按钮,它给了我一个错误,说与 JavaScript 来源不匹配。当我尝试添加 JavaScript 源时,它不会接受它并说它无效或被禁止。当我尝试在本地执行此操作时,它运行良好(我将 JavaScript 源添加为我的本地主机),但其他功能(如将数据添加到电子表格)不起作用。我知道首先没有解决方案(当我通过 Google App Script IDE 部署应用程序时使用登录按钮),因为我已经对此进行了详尽的研究。所以,我想知道是否有另一种方式。就像另一个平台可以支持我项目的部署,意味着google登录和google电子表格交互没有问题。
答案 0 :(得分:2)
出于安全原因,Google Apps Script 会将您的 HTML 服务 (see restrictions documentation) 沙箱化。对于内容服务,它每次执行时都会重定向到不同的域 (see documentation)。因此,您有两个选择:使用 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
部署应用程序,这样它就不会像您一样执行。
通过此设置,用户将被要求在打开页面之前授予所需的权限。
第二种解决方案是寻找网络托管服务提供商。因为您似乎没有后端,所以它可以用于静态页面(有些是免费的)。这将为您提供一个稳定的 URL,并且应该与您的本地主机完全相同。