Javascript GoogleApps脚本OAuth-returnURL更新加载项
我正在使用以下用于谷歌应用程序脚本(谷歌文档插件)的库: 我将脚本作为返回url: 我有一个运行良好的回调函数: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
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()
返回的--这就是您正在使用的方法吗?