闪亮打开多个浏览器选项卡

时间:2017-01-02 11:30:42

标签: r browser tabs shiny

在我的Shiny应用程序中,我想打开几个URL,并且在打开之间有一个短暂的延迟。 下面是一些示例代码,在我的RStudio中运行应用程序时效果很好。

var StudentCourses =context.studentCourses.Where(c => c.StudentId == studentId).Select(c => new CustomClass
    {
        Course = c.Course ,
        Location = c.Location
    })

但是,当我在shinyapps.io上运行此应用时,var StudentCourses = context.courses.Where(c => c.Students.Any(s => s.StudentId == studentId)).Select(c => new CustomClass { Course = c, Location = context.studentCourse.FirstOrDefault(sc=>sc.StudentId==studentId && sc.CourseId==c.CourseId).Location }).Distinct() 无效(如上所述here)。

有没有人知道如何打开多个浏览器标签,并在打开它们之间有一个短暂的延迟,这样当应用程序部署在shinyapps.io上时它也可以正常工作? 是否可以使用R代码或JavaScript是必要的?

1 个答案:

答案 0 :(得分:1)

这是一个非常古老的问题,但在其他人在搜索时偶然发现时会回答。

正如您所链接的参考文献中所述,我认为您需要使用一些JS来完成此任务。下面是使用shinyjs包定义闪亮兼容browseURL函数的示例。一旦我们定义了函数,我们就会向ui添加几行,然后在server中将其称为js$browseURL()

library(shiny)
library(shinyjs)

# define js function for opening urls in new tab/window
js_code <- "
shinyjs.browseURL = function(url) {
  window.open(url,'_blank');
}
"

URLs <- c("http://www.google.com", "http://www.stackoverflow.com")

ui <- fluidPage(
  # set up shiny js to be able to call our browseURL function
  useShinyjs(),
  extendShinyjs(text = js_code, functions = 'browseURL'),

  actionButton(
    "click",
    "Click here to open several browser tabs"
  )
)

server <- function(input, output){
  observeEvent(input$click, {
    for (i in URLs){
      js$browseURL(i)
      Sys.sleep(1)                #Short delay of 1 second
    }
  })
}

shinyApp(ui, server)