gpt4 book ai didi

javascript - 来自库的 Google Script HTML 表单引发错误未捕获

转载 作者:行者123 更新时间:2023-12-04 07:55:48 25 4
gpt4 key购买 nike

我有一个像这样的 HTML 格式的库:code.gs :

function openDialog() {
SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile("h"), "Test" );
}

function hello() {
console.log('booo');
}
h.html :
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<button id="b">Click me</button>
<script>
var b = document.getElementById('b');
b.onclick = function() {
google.script.run
.withSuccessHandler(function(str){window.alert("executed");})
// .withFailureHandler(function(error){window.alert("failed");})
.hello();
}
</script>
</body>
</html>
我共享了这个脚本以供查看并将其部署为库。接下来,我使用以下代码在 Google Sheet 中创建了一个绑定(bind)脚本:
function onOpen() {
SpreadsheetApp.getUi().createMenu('test').addItem('run', 'myFunction').addToUi();
}

var hello = function() {};
function myFunction() {
TT.openDialog();
}
我添加了带有标识符的库:TT。
接下来,我使用绑定(bind)代码刷新了我的 Google 表格文件以查看菜单“测试”,运行测试 > 运行。 HTML 窗口出现了。当我点击按钮时,什么也没发生。当我打开控制台时,我看到了错误:
enter image description here
如果我不使用库,则不会出现此错误。
请帮我解决这个问题。

最佳答案

我和你经历过同样的情况。就我而言,问题的原因是图书馆方面的授权。

  • 当在库端没有完成使用库中作用域的授权过程时,我确认了Uncaught的错误。发生了。
  • 在库端完成使用库中范围的授权过程时,我确认了Uncaught的错误。没有发生。

  • 也就是说,在我的环境中,我确认当库用于您的情况时,需要为客户端和库端授权范围。
    因此,作为一种解决方法,我使用了以下流程。
    解决方法:
  • 创建一个 Google Apps 脚本库。
  • 请复制并粘贴 code.gs 的脚本和 h.html到独立脚本或容器绑定(bind)脚本。

  • 将 Google Apps 脚本部署为库。
  • 例如,在你的脚本中,请直接运行 hello()在图书馆方面,并授权范围。
  • 将库安装到客户端并从客户端加载库。
  • 请运行myFunction()在客户端。

  • 通过这个流程,当你运行 run在自定义菜单并单击按钮, executed 的对话框被打开。
    笔记:
  • 在这种情况下,当我想让用户使用客户端脚本时,需要对客户端和库端的范围进行授权。我想这可能有点不方便。
  • 那么,如何为 Google 问题跟踪器报告此问题? Ref不幸的是,我找不到具有相同情况的问题跟踪器。

  • 添加:
    作为从客户端授权库端范围的方法,我想建议使用Web Apps。我以为在使用Web Apps时,库端的授权可以在客户端完成。至此,我认为不便之处可能会得到一点解决。
    请执行以下流程。
    1.图书馆方面。
    请复制并粘贴以下脚本。
    Google Apps 脚本: code.gs
    function openDialog() {
    SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile("h"), "Test" );
    }

    function hello() {
    console.log('booo');
    }

    function doGet() {
    return HtmlService.createHtmlOutput("ok");
    }
    HTML: h.html
    <!DOCTYPE html>
    <html>
    <head>
    <base target="_top">
    </head>
    <body>
    <button id="b">Click me</button>
    <script>
    var b = document.getElementById('b');
    b.onclick = function() {
    google.script.run
    .withSuccessHandler(function(str){window.alert("executed");})
    // .withFailureHandler(function(error){window.alert("failed");})
    .hello();
    }
    </script>
    </body>
    </html>
    2. 在图书馆端部署Web Apps。
    请在图书馆侧部署 Web 应用程序。关于这个方法,可以看官方文档。 Ref详细设置如下。
  • Execute as: User accessing the web app
  • Who has access: Anyone with Google account

  • 3. 部署为库。
    请部署为库。 Ref
    4.客户端。
    请将库安装到客户端。并且,请复制并粘贴以下脚本。在这种情况下,请替换 https://script.google.com/macros/s/###/exec使用您的 Web 应用程序 URL。
    function onOpen() {
    SpreadsheetApp.getUi().createMenu('test').addItem('auth', 'auth').addItem('run', 'myFunction').addToUi();
    }

    var hello = function() {};
    function myFunction() {
    TT.openDialog();
    }

    function auth() {
    const html = HtmlService.createHtmlOutput(`<input type="button" value="Authorize" onclick="window.open('https://script.google.com/macros/s/###/exec', '_blank');google.script.host.close()">`);
    SpreadsheetApp.getUi().showDialog(html);
    }
    5. 测试。
    首先请运行 auth在自定义菜单中。这样,您可以授权客户端和库端的范围。当新标签没有打开时 auth正在运行,请运行 auth()再次在脚本编辑器中。
    下一步,请运行 run .这样,您的对话框就打开了。并且,当两个授权(客户端和库端)都使用 auth已经完成,当你点击按钮时, executed 的对话框被打开。
    引用:
  • Web Apps
  • Taking advantage of Web Apps with Google Apps Script
  • 关于javascript - 来自库的 Google Script HTML 表单引发错误未捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66711782/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com