闪亮打开多个浏览器标签

Teu*_*eun 5 browser tabs r shiny

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

library(shiny)

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

ui <- fluidPage(
  actionButton(
    "click",
    "Click here to open several browser tabs"
  )
)

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

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

然而,当我在shinyapps.io运行这个程序,browseURL()不工作(如提到这里)。

有谁知道如何打开多个浏览器选项卡,并在打开它们之间有很短的延迟,以便在应用程序部署在 Shinyapps.io 上时也能正常工作?使用 R 代码可能还是需要 JavaScript?

Ada*_*uer 7

这是一个相当古老的问题,但可以回答以防其他人在搜索时偶然发现。


正如您链接的参考资料中所述,我认为您需要使用一些 JS 来完成此任务。下面是使用shinyjs包定义闪亮兼容browseURL函数的示例。一旦我们定义了函数,我们就向 中添加几行ui,然后在serveras 中调用它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)
Run Code Online (Sandbox Code Playgroud)