【问题标题】:Switching from Rhino to V8 causes Error code PERMISSION_DENIED从 Rhino 切换到 V8 导致错误代码 PERMISSION_DENIED
【发布时间】:2025-12-21 18:55:10
【问题描述】:

最近我将我的谷歌幻灯片脚本运行时从Rhino 切换到V8。我测试了我的插件,但出现错误:

We're sorry, a server error occurred while reading from storage. Error code PERMISSION_DENIED.

我的脚本使用PropertiesService.getUserProperties()。我发现我必须退出我的谷歌帐户并重新登录,它工作

我可以想象,对于使用此插件的其他用户来说,这也可能是一件痛苦的事情。有没有其他方法可以解决这个错误?

appscript.json 配置

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

我还在我的 PC 上开发插件本地化,并使用 clasp 将代码推送到 App 脚本。

更新

我创建了最小的项目来重现此错误,我发现PropertiesService.getUserProperties() 不是问题所在。结果从Rhino切换到V8后,我无法调用任何appscript函数。

// Code.gs
function onInstall(event) {
    onOpen(event);
}

function onOpen(event) {
    SlidesApp.getUi().createAddonMenu()
        .addItem('Open the sidebar', '_showSidebar')
        .addToUi();
    _showSidebar();
}

function _showSidebar() {
    var ui = HtmlService
        .createHtmlOutputFromFile('index')
        .setTitle('Test add-on');
    SlidesApp.getUi().showSidebar(ui);
}

function getCurrentSlideObjectId() {
    var page = SlidesApp.getActivePresentation().getSelection().getCurrentPage();
    if (page && page.getPageType() === SlidesApp.PageType.SLIDE) {
        return page.getObjectId();
    }
    return null;
}

带模板:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    
    <script>
       const onButtonClick = () => {
         google.script.run
          .withSuccessHandler(success)
          .withFailureHandler(error)
          .getCurrentSlideObjectId()
       }
       const success = (currentSlideObjectId) => {
         console.log("It works!", currentSlideObjectId);
       }
       const error = (error) => {
         error = typeof error === 'string' ? new Error(error) : error;
         console.error(typeof error === 'object' && error !== null ? error.message : error);
       }
    </script>
  </head>
  <body>
    <button onclick="onButtonClick()">Click me</button>
  </body>
</html>

目前我使用 2 个不同的账户登录到我的谷歌驱动器。在登录 Google chrome 以外的其他 acc 上测试插件时,会出现错误。

We're sorry, a server error occurred while reading from storage. Error code PERMISSION_DENIED.

【问题讨论】:

  • 为什么要使用v8?我的意思是,您是否正在寻找特定的好处?
  • @Rubén 更好的性能、ES6、更好的日志记录以及可能修复了一些错误,例如this,我们也遇到了缩小代码的问题(不记得细节)
  • 你看到我上一条评论的链接了吗?
  • 只是好奇,但是当这种情况发生时,您是否有机会使用相同的浏览器登录了另一个帐户?

标签: google-apps-script v8 google-apps-script-addon google-slides google-apps-script-runtime


【解决方案1】:

an add-on can lead to PERMISSION_DENIED under certain conditions 是 Google IssueTracker 的一个已知问题,您可以继续点击+1 以增加问题的流行度。正如Rubén 所说,这个问题也可能在multiple logged users 之后出现,所以如果您的情况与该线程相似,请继续使用+1

【讨论】:

    最近更新 更多