最近我的脚本在第一次运行后开始失败。换言之:第一次运行成功,下一次失败,并且错误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();
}
重现问题的步骤:
- 打开包含5张幻灯片的幻灯片演示
- 单击";移动幻灯片";第一次按下
- 单击";移动幻灯片";第二次按下
- 单击";移动幻灯片";第三次按键
第一次移动幻灯片任何连续运行都失败,并出现控制台错误:400〃;请求包含无效的参数">
请注意,此代码和类似代码在2021年9月起作用。
更新:我还将此错误提交给了谷歌幻灯片问题跟踪器:https://issuetracker.google.com/issues/210299318但这些问题多年来一直存在,没有任何解决办法。我希望找到一些解决办法,或者至少是一个变通办法。
这是一个可重复的错误,已通过IssueTracker报告(https://issuetracker.google.com/issues/210299318)。
如果其他人遇到同样的错误,我强烈建议点击问题编号旁边的星号进行投票。
作为常规开发人员,我认为不幸的是,除了发布问题/突出现有问题之外,我们没有什么可以解决谷歌应用程序脚本服务的问题。
尝试的方法
-
使用属性服务存储/检索活动演示Id,而不是使用
let p = SlidesApp.getActivePresentation();
使用let p = SlidesApp.openById(id);
-
更改脚本所有者,将脚本移到共享驱动器/从共享驱动器移出。
-
复制脚本。你可以使用相同的谷歌云项目,只需更新谷歌应用程序脚本项目和版本号
-
使用旧的运行时(Rhino(,而不是默认运行时(Chrome V8(。注意:旧的运行时不支持
let
和ECMASCRIPT-2016上引入的其他一些JavaScript更改。对于问题中显示的代码,用var
替换let
看起来是更容易/更方便的方法。有关详细说明,请参阅https://developers.google.com/apps-script/guides/v8-runtime#enabling_the_rhino_runtime -
请尝试使用高级幻灯片服务,而不是幻灯片(基本(服务。