【问题标题】:Error response 400 "Request contains an invalid argument" after the standard Slides manipulation标准幻灯片操作后的错误响应 400“请求包含无效参数”
【发布时间】:2022-01-06 10:05:41
【问题描述】:

最近我的脚本在第一次运行后开始失败。也就是说:第一次运行成功,下一次运行失败,在浏览器的开发工具中可以看到错误400“请求包含无效参数”。

这是一个可靠地重现问题的小代码示例:

appscript.json

{
  "timeZone": "Europe/Riga",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",

  "addOns": {
    "common": {
      "name": "A simple test script",
      "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png"
    },
      "slides": {
        "homepageTrigger": {
          "runFunction": "onSlidesEditorHomepage"
        }
      }
  }
}

code.gs

function onSlidesEditorHomepage() {
  var card = CardService.newCardBuilder()
      .addSection(
        CardService.newCardSection().addWidget(
          CardService.newDecoratedText()
          .setText("Slides...")
          .setButton(
            CardService.newTextButton()
              .setText('Move a slide')
              .setOnClickAction(CardService.newAction().setFunctionName('onMoveClick'))
              .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
              .setDisabled(false)
          )
        )
      );
  return card.build();

}

function onMoveClick() {
  let p = SlidesApp.getActivePresentation();
  let slides = p.getSlides();
  slides[1].move(0);  // move the 2nd slide to the beginning

  // appendSlide function hangs in the same way
  // let p = SlidesApp.getActivePresentation();
  // let slides = p.getSlides();
  // p.appendSlide(slides[0]);    // inserts a copy of the slide

  return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification()
      .setText("The slides has been moved"))
      .build();
}

重现问题的步骤:

  1. 打开包含 5 张幻灯片的幻灯片演示文稿
  2. 第一次点击“移动幻灯片”按钮
  3. 第二次点击“移动幻灯片”按钮
  4. 第三次点击“移动幻灯片”按钮

第一次移动幻灯片。 任何连续运行都失败并出现控制台错误:400“请求包含无效参数”。

请注意,此代码和类似代码在 2021 年 9 月有效。

更新:我还将此错误提交给了 Google 幻灯片问题跟踪器:https://issuetracker.google.com/issues/210299318,但此类问题存在多年,没有任何修复或解决方法。我希望能找到一些解决方法,或者至少是一种解决方法。

【问题讨论】:

  • “但此类问题会存在多年,没有任何修复或解决方法”这对于某些问题来说是正确的,但并非对所有问题都适用。给问题加星标有助于告诉谷歌有多少人对此感兴趣,但还有其他因素被认为可以“修复”它。您的问题的好处是它已经“已分配”(许多问题从未达到此状态)

标签: google-apps-script add-on google-slides google-workspace-add-ons


【解决方案1】:

这是已通过 IssueTracker (https://issuetracker.google.com/issues/210299318) 报告的可重现错误。

如果其他人遇到相同的错误,我强烈建议通过单击问题编号旁边的星号来投票。

【讨论】:

  • 这是一个答案吗?我提交了那个问题。我等不及谷歌标准的 2 年,直到他们修复基本的东西。请给它点赞,因为它目前有 0 个点赞。
  • @MarisB。你应该提到那个问题上的问题。对于您的不耐烦,我们无能为力。
【解决方案2】:

作为普通开发人员,我认为不幸的是,除了发布问题/为现有问题加注星标之外,我们没有其他办法可以解决此类 Google Apps 脚本服务问题。

尝试的事情

  1. 使用属性服务来存储/检索活动的演示文稿 ID,而不是 let p = SlidesApp.getActivePresentation(); 使用 let p = SlidesApp.openById(id);

  2. 更改脚本所有者,将脚本移入/移出共享驱动器。

  3. 复制脚本。您可以使用相同的 Google Cloud 项目,只需更新 Google Apps 脚本项目和版本号

  4. 使用旧运行时 (Rhino) 而不是默认运行时 (Chrome V8)。 注意:旧的运行时不支持 let 和 ECMASCRIPT-2016 中引入的其他一些 JavaScript 更改。对于问题中显示的代码,用var 替换let 看起来是更简单/更方便的方法。详细说明见https://developers.google.com/apps-script/guides/v8-runtime#enabling_the_rhino_runtime

  5. 尝试使用Advanced Slides Service 而不是幻灯片(基本)服务。

【讨论】:

  • 感谢您的建议! 1-3 没用。我已经试过了。 4 号和 5 号对我来说不是选项,因为已经有很大的代码库使用所有新的东西 (V8) 和旧的 Slides 类。很可能我们正在放弃 Google Workspace,因为这个问题非常严重,就像 a = b + c 停止工作一样。此外,由于没有人关心,Apps Script 用户必须为零,这是一个巨大的风险,将来会出现问题并且没有人会修复它。
  • @MarisB。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2020-01-06
  • 2020-05-30
  • 2021-08-07
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多