标准幻灯片操作后 400 "Request contains an invalid argument"的错误响应



最近我的脚本在第一次运行后开始失败。换言之:第一次运行成功,下一次失败,并且错误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月起作用。

更新:我还将此错误提交给了谷歌幻灯片问题跟踪器:https://issuetracker.google.com/issues/210299318但这些问题多年来一直存在,没有任何解决办法。我希望找到一些解决办法,或者至少是一个变通办法。

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

如果其他人遇到同样的错误,我强烈建议点击问题编号旁边的星号进行投票。

作为常规开发人员,我认为不幸的是,除了发布问题/突出现有问题之外,我们没有什么可以解决谷歌应用程序脚本服务的问题。

尝试的方法

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

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

  3. 复制脚本。你可以使用相同的谷歌云项目,只需更新谷歌应用程序脚本项目和版本号

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

  5. 请尝试使用高级幻灯片服务,而不是幻灯片(基本(服务。

相关内容

  • 没有找到相关文章