Javascript GoogleApps脚本OAuth-returnURL更新加载项

Javascript GoogleApps脚本OAuth-returnURL更新加载项,javascript,oauth,google-apps-script,Javascript,Oauth,Google Apps Script,我正在使用以下用于谷歌应用程序脚本(谷歌文档插件)的库: 我将脚本作为返回url: 我有一个运行良好的回调函数: function authCallback(request) { var Service = geService(); var isAuthorized = Service.handleCallback(request); if (isAuthorized) { return HtmlService.createHtmlOutput('Su

我正在使用以下用于谷歌应用程序脚本(谷歌文档插件)的库:

我将脚本作为返回url:

我有一个运行良好的回调函数:

function authCallback(request) {
    var Service = geService();
    var isAuthorized = Service.handleCallback(request);
    if (isAuthorized) {
        return HtmlService.createHtmlOutput('Success! You can close this tab.');
    } else {
        return HtmlService.createHtmlOutput('Denied. You can close this tab');
    }
}
在插件UI的主代码中,我有以下用于添加侧栏的开关:

if(!Service.hasAccess()) {
    var authorizationUrl = Service.getAuthorizationUrl();

    template = HtmlService.createTemplateFromFile('HuddleSidebarNoAuth');
    template.authorizationUrl = authorizationUrl;
    html = template.evaluate();


} else {

    template = HtmlService.createTemplateFromFile('HuddleSidebar');
    html = template.evaluate();

}

我需要它在成功回调时重新运行此命令,以便它点击
hasAccess
条件,并在不刷新页面的情况下重新呈现侧边栏。我走错方向了吗

在侧边栏脚本中,启动oauth2流的操作也可以触发hasAccess的侦听器。然后,只要hasAccess返回肯定值,就可以取消侦听器并适当地加载UI

在超时时间方面,你可以随心所欲地大胆或保守。太长,一旦“身份验证”选项卡关闭,将出现延迟

function showSidebar() {
  ...
        '<a href="<?= authorizationUrl ?>" target="_blank" onclick="initateAccessListener()">Authorize</a>. ' +
        'Reopen the sidebar when the authorization is complete.');
    ...
  }
}

function initiateAccessListener() {
    timeoutID = window.setTimeout(checkHasAccess, 2000);
}

function checkHasAccess() {

  // code to call a google side function the check hasAccess

  // if (hasAccess) {

  //     window.clearTimeout(timeoutID)
  //     """call to reload sidebar UI content"""

  // } else {
  //    timeoutID = window.setTimeout(slowAlert, 2000);
  // }
}
函数showSidebar(){
...
'. ' +
“授权完成后重新打开侧栏。”);
...
}
}
函数initiateAccessListener(){
timeoutID=window.setTimeout(checkHasAccess,2000);
}
函数checkHasAccess(){
//调用google端函数check hasAccess的代码
//if(hasAccess){
//window.clearTimeout(timeoutID)
//“”“调用以重新加载侧栏UI内容”“”
//}其他{
//timeoutID=window.setTimeout(slowAlert,2000);
// }
}

为伪代码道歉,但我在手机上回答

谢谢,显然我考虑过这种方法,但假设我错过了来自谷歌脚本的回调。谢谢,客户端代码中应该存在
checkHasAccess
超时,而不是谷歌脚本代码。我已经让它使用这种方法,稍后将发布正确的代码。我会一直等到那时,看看是否有人可以通过回调而不是超时来提供答案,但我怀疑这是可能的。事实上,请确保您使用
HtmlService.SandboxMode.IFRAME
-而不是
NATIVE
(从昨天开始就被弃用)您能澄清这个问题吗?据我所知,名为
Service
的应用程序脚本类没有定义任何OAuth方法(如您正在调用的
hasAccess()
函数)。但是,在
AuthorizationInfo
类上有一个方法
getAuthorizationUrl()
,它是由
ScriptApp.getAuthorizationInfo()
返回的--这就是您正在使用的方法吗?