【问题标题】:new google script version throwing javascript error新的谷歌脚本版本抛出 javascript 错误
【发布时间】:2018-09-04 16:03:25
【问题描述】:

我有一个正在运行的 Google Script-JSON-javascript webapp,但是当我更改 JSON 输出、保存新的 Google Script 版本并发布为 web 应用程序时,网页会引发 CORB 错误。

在 GS 中返回一个版本,让它再次工作。为什么新的 GS 版本会导致错误。即使使用相同的代码但在新版本中仍然会引发错误。是否存在 GS 版本缓存问题?我可以做些什么来更新版本?

当前版本的工作页面:https://arcacademy.ca/arc-academy-calendar-2018-2019/

注意:您可以在控制台中看到正在发送的 JSON 文本。新代码具有相同的格式/结构,只是将颜色值从十六进制更改为 1 到 10。

尝试通过创建新的 GS 脚本来解决此问题,但收到相同的错误:

跨域读取阻塞 (CORB) 阻止了跨域响应 https://script.google.com/macros/s/AKfycbyM51kxwQOYM3hRyrW7semhmUka2z2w-jU09KBPL38IxKapeQQ1/exec?callback=receivedCalendarEvents MIME 类型为 text/html。看 https://www.chromestatus.com/feature/5629709824032768 了解更多 详情。

这是 not working page 在控制台中抛出上述错误:https://arcacademy.ca/clone-of-arc-academy-calendar-2018-2019/

Google Script 网络应用部署于:

  • 像我一样执行
  • 任何人,甚至匿名

谷歌脚本代码:

function doGet(e) {
  if (e.parameter.method=="populate_events") {
    var scriptProperties = PropertiesService.getScriptProperties();
    var calendarId = scriptProperties.getProperty('calendarId') || 'primary';
    var v = extractCalendarDateColors( calendarId, e.year );

    return ContentService.createTextOutput(e.parameter.callback + "(" + JSON.stringify(v) + ")")
    .setMimeType(ContentService.MimeType.JAVASCRIPT);
  }
}

工作页面的 Javascript 代码(src= 是错误页面的唯一更改):

<script>
calendarEvents = {};
function receivedCalendarEvents(jsonData) {
console.log('received',jsonData);
calendarEvents = JSON.parse(jsonData);
}
</script>
<script src="https://script.google.com/macros/s/AKfycbzMCDiTzxGx2cN5dtXqCG2gvxJ6FGZ_t6UuPiT-HyDesu2--EY/exec?callback=receivedCalendarEvents"></script>
<script>

Google Console Cloud -- 我设置了以下内容:

  • 启用日历 API
  • 添加了 Apps 脚本客户端 ID

我感觉自己迷失在 Google 访问领域。任何帮助将不胜感激!

【问题讨论】:

  • 我可以问你关于你的问题吗?您问题中的脚本是修改后的脚本吗?即“非工作页面”的脚本?虽然我不确定这是否直接导致解决方案,但您能否提供修改脚本前后的脚本?
  • 如果你的问题的脚本是“not work page”的脚本,这个修改怎么样?在您的“不工作页面”中,提取时使用的端点是https://script.google.com/macros/s/#####/exec?callback=receivedCalendarEvents。但是在您的问题中,您的 Web 应用程序脚本不会返回 if (e.parameter.method=="populate_events") {} 的值。实际上,The script completed but did not return anything. 被返回。那么当endpoint修改为https://script.google.com/macros/s/#####/exec?method=populate_events时,情况会被修改吗?
  • 作为附加报告,当我尝试在我的环境中执行此操作时,使用查询时出现脚本错误。这是Error: no such calendar: #####@group.calendar.google.com :: RangeError: Date is invalid. (line 66, file &amp;quot;Code&amp;quot;, project &amp;quot;Arc Public Calendar v8&amp;quot;)。所以请再次确认您修改的脚本。我们也看不到extractCalendarDateColors()
  • 上面的javascript来自工作页面。关于添加参数的优点。我已经更新了网页以反映这一点。谢谢你。然而结果相同。您可能会收到错误消息,因为 Google 控制台限制了来自我的域的请求。 extractCalendarDateColors 创建 JSON 对象及其字段:日期、名称和颜色。
  • Tanaike,我检查了不工作脚本的 GConsole 错误,我得到了相同的“错误:没有这样的日历”。两个项目脚本属性中的日历 ID 相同,因此我正在调查为什么我无法访问 Not Working 脚本中的日历(即使它在调试器模式下运行)。

标签: javascript google-apps-script


【解决方案1】:

感谢 Tanaike 对这个问题的启发。如上所述,CORB(跨源错误)可能与 javascript 调用有关。

我更新了javascript:https://script.google.com/macros/s/#####/exec?method=populate_events&year=2018

并更新了谷歌脚本以使用参数而不抛出错误:

  • e.parameter.method
  • e.parameter.year

所以我似乎一直收到跨源错误,它来自一个格式不正确的 javascript 调用和 google 脚本端的一个错误,它返回一个错误而不是一个格式正确的 JSONP 对象。

感谢您对田池的帮助!! :)

【讨论】:

  • 我真的很抱歉我的回复晚了。但我知道你的问题已经解决了。我很高兴。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
相关资源
最近更新 更多