使用按钮在Google Appsscript的新窗口中打开URL

使用按钮在Google Appsscript的新窗口中打开URL,url,hyperlink,google-apps-script,Url,Hyperlink,Google Apps Script,我正在为新的GoogleSheets编写一个应用程序,将另一个API与工作表集成。我需要通过打开一个新窗口授权用户,允许用户登录以授权我的应用程序 到目前为止,我发现实现这一点的唯一方法是使用一个简单的超链接。有没有一种方法可以通过调用后端函数的按钮来实现这一点?当用户点击一个按钮时,我想不出有什么方法可以在新窗口中打开链接 注意:我希望这样做与UI保持一致。我需要添加一个“授权”和一个“取消授权”按钮。“取消授权”按钮只调用一个函数从用户帐户中删除访问令牌,但“授权”按钮需要打开一个新的URL

我正在为新的GoogleSheets编写一个应用程序,将另一个API与工作表集成。我需要通过打开一个新窗口授权用户,允许用户登录以授权我的应用程序

到目前为止,我发现实现这一点的唯一方法是使用一个简单的超链接。有没有一种方法可以通过调用后端函数的按钮来实现这一点?当用户点击一个按钮时,我想不出有什么方法可以在新窗口中打开链接


注意:我希望这样做与UI保持一致。我需要添加一个“授权”和一个“取消授权”按钮。“取消授权”按钮只调用一个函数从用户帐户中删除访问令牌,但“授权”按钮需要打开一个新的URL以将用户发送到另一个站点登录

这里有一个可能的解决方案,使用自动打开的侧边栏,它看起来像这样:

代码如下:

function onOpen() {
  var shUi = SpreadsheetApp.getUi();
  var app = UiApp.createApplication().setTitle('Custom functions');
  var panel = app.createVerticalPanel().add(app.createHTML('please select an option below').setStyleAttribute('padding','10px'));
  var grid = app.createGrid(1,2).setWidth('200');
  var dHandler = app.createServerHandler('removeAuth');
  var b1 = app.createButton("Authorize");
  var b2 = app.createButton("De-authorize",dHandler).setTitle('remove authorization');
  var link = app.createAnchor('XXXXX','http://www.google.com').setStyleAttributes({'zIndex':'1' , 'position':'fixed' , 'top':'45' , 'left':'20', 'color':'transparent' }).setTitle('proceed in a new tab');
  var G1 = app.createVerticalPanel().add(b1).add(link);
  grid.setWidget(0,0,G1).setWidget(0,1,b2);
  app.add(panel).add(grid)
  shUi.showSidebar(app);
}

function removeAuth(){
  // some code
}

在应用程序脚本中,您无法使用按钮单击事件打开新选项卡,但这可以通过 锚定。因此,创建一个锚点并设置Href,其中包含要在新选项卡中打开的链接。要获得按钮的感觉,可以使用背景图像属性为锚点设置StyleAttribute

var anchor1 = app.createAnchor('Authorize','http://www.google.com')
                 .setStyleAttribute('backgroundImage','url('tree.png')');

在电子表格的上下文中谈论按钮时,您的具体想法是什么?这很有效,谢谢!我打算用HTML服务构建UI,但忽略了新的UI生成器。有趣的是,HTML服务似乎没有任何方法可以做到这一点。实际上,HTML服务可以做到这一点,但我更喜欢uiApp,所以我选择了简单的方法;-)既然
UiApp
已被弃用,在
HtmlService
中重写也不是个坏主意。那么,我们就不必为将“GAS Open URL”问题标记为与此问题重复的问题而感到内疚:)