在我的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是必要的?
答案 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)