Google apps script Can';t在GMail插件中的Google应用程序脚本回调页面上提供HTML

Google apps script Can';t在GMail插件中的Google应用程序脚本回调页面上提供HTML,google-apps-script,gmail-addons,gsuite-addons,Google Apps Script,Gmail Addons,Gsuite Addons,我正在开发一个通过OAuth2连接到第三方服务的GMail插件。要获取授权代码,请使用以下重定向URI:。 以下是触发授权的代码段: var stateToken = ScriptApp.newStateToken() .withMethod( "authCallback" ) .withTimeout( 120 ) .createToken

我正在开发一个通过OAuth2连接到第三方服务的GMail插件。要获取授权代码,请使用以下重定向URI:。 以下是触发授权的代码段:

var stateToken = ScriptApp.newStateToken()
                          .withMethod( "authCallback" )
                          .withTimeout( 120 )
                          .createToken();

var authUrl = _authBaseUrl
              + "&client_id=" + encodeURIComponent( _clientId )
              + "&redirect_uri=" + encodeURIComponent( _redirectUri )
              + "&state=" + stateToken;

CardService.newAuthorizationException()
           .setAuthorizationUrl( authUrl )
           .setResourceDisplayName( "Resource" )
           .throwException();
下面是回调函数(HTML代码段取自):

函数authCallback(请求)
{
createAccessToken(request.parameter.code);
返回HtmlService.createHtmlOutput('Success!setTimeout(function(){top.window.close()},1);');
}
createAccessToken函数被成功调用,插件获得访问令牌。但是,弹出窗口中不提供HTML。相反,有一个占位符带有以下错误:“脚本已完成,但未返回任何内容。”

因此,我遇到了一个无法自动关闭的错误窗口,并且没有告诉用户必须关闭该窗口才能继续使用该插件

我是不是做错了什么,或者这是某种bug或是一个已删除的功能?谢谢你的建议

UPD:
这个错误看起来像是这样的,结果证明HtmlService在这种情况下确实可以工作。我遇到了authCallback的函数名冲突,因此没有调用正确的函数名。对不起,误传了。如果有人在处理回调窗口时遇到问题,请按照问题中的说明进行操作。

结果表明,在这种情况下,HtmlService实际上可以工作。我遇到了authCallback的函数名冲突,因此没有调用正确的函数名。对不起,误传了。如果有人在处理回调窗口时遇到问题,按照问题中所述操作。

Gmail加载项不需要返回卡片吗?@tehhow您必须将卡片返回到加载项本身,但不能将它们返回到通过OpenLink或AuthorizationException打开的浏览器窗口。您是否尝试过用
ContentService
代替html?@TheMaster yes,我尝试了两种方法
返回ContentService.createTextOutput(“成功!”)
和一些JS在authCallback和doGet中具有各自的mime类型。结果是一样的。如果您有一个
doGet()
从contentService返回,您是否已将脚本发布为web应用程序?Gmail加载项不需要返回卡片吗?@tehhowch您必须将卡片返回到加载项本身,但无法将它们返回到通过OpenLink或AuthorizationException打开的浏览器窗口。您是否尝试了
ContentService
而不是html?@TheMaster yes,我尝试了两种方法
返回ContentService.createTextOutput(“成功!”)
和一些JS在authCallback和doGet中具有各自的mime类型。结果是一样的。如果您有一个
doGet()
从contentService返回,您是否将脚本发布为web应用程序?
function authCallback( request )
{
    createAccessToken( request.parameter.code );
    return HtmlService.createHtmlOutput('Success! <script>setTimeout(function() { top.window.close() }, 1);</script>');
}