如何通过关闭浏览器窗口停止运行闪亮的应用程序?

Eka*_*Eka 13 r shiny shinydashboard

我已经在shinyapps.io中部署了一个应用程序并且工作正常.

我运行的应用程序只有5分钟,但当我检查指标时,它显示运行时间约为0.7小时.我发现有一个15分钟的默认空闲时间,我已经改为5分钟(最小).我还注意到,即使在关闭闪亮应用程序的浏览器窗口后,它仍然显示应用程序在我的仪表板中运行.

我假设应用程序在浏览器窗口关闭时不会停止运行,只有在满足空闲时间条件时它才会停止.

有没有办法在浏览器窗口关闭时停止闪亮的应用程序?以下代码是否适用于此实例?

session$onSessionEnded(function() {
    stopApp()
  })
Run Code Online (Sandbox Code Playgroud)

Dou*_*You 13

我不知道shinyapps.io,但是在R(正如你的标签所示)你确实可以shinyApp通过onSessionEnded.以下是最小的工作示例.

rm(list=ls())

library(shiny)

doshiny <- function() {
  app=shinyApp(
    ui = fluidPage(
      textInput("textfield", "Insert some text", value = "SomeText")
    ),
    server = function(input, output, session) {
      session$onSessionEnded(function() {
        stopApp()
      })
    }
  )
  runApp(app)
}

openshiny <- function() {
  doshiny()
  print("Finished.")
}

openshiny()
Run Code Online (Sandbox Code Playgroud)

  • 虽然对于多个用户来说这不是最佳解决方案,但它是根据 OP 请求关闭(并停止)应用程序的解决方案。该解决方案是我自己为本地运行的应用程序实现的,我是唯一的用户 - 并且它有效。如果您确实有一个考虑多用户的更好的想法,我建议您发布正确的答案,而不是发布“坏主意”或“不好”。 (5认同)
  • 这是一个坏主意!如果多个用户连接到该应用程序,那么一个用户(或浏览器选项卡)退出将导致每个人都被踢掉! (3认同)

unt*_*ill 6

我发现这个优秀的代码完成了这项工作.基本上,你喜欢这样:

library(shiny)
library(shinyjs)

jscode <- "shinyjs.closeWindow = function() { window.close(); }"

ui <- fluidPage(
  useShinyjs(),
  extendShinyjs(text = jscode, functions = c("closeWindow")),
  actionButton("close", "Close window")
)

server <- function(input, output, session) {
  observeEvent(input$close, {
    js$closeWindow()
    stopApp()
  })
}

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

请注意,可能会禁止通过JavaScript关闭浏览器窗口.但这是另一个讨论.