r - session 结束时的计时事件

标签 r shiny

我正在构建一个 Shiny 的应用程序,我想在客户端关闭时停止(本地)服务器。实现此目的的一个简单方法是将其包含在 shinyServer 函数中:

session$onSessionEnded(function() {
    stopApp()
})

这种方法的一个缺点是,如果用户决定点击刷新,那么应用程序就会终止。

我尝试了各种解决方法,例如使用reactiveTimer/invalidateLater 以一定的时间间隔检查连接。但是,它们采用 session 引用(它们特定于 session ),因此在 onSessionEnded 之后不会执行任何操作。

有没有办法让“全局”服务器计时器定期执行,并可以检查事件连接?或者另一种实现应用程序自动关闭但允许刷新页面的方法?

最佳答案

您可以在服务器上添加一个 actionButton 和一些代码,以便在单击按钮时停止应用程序。例如:

runApp(list(
  ui = bootstrapPage(
    actionButton('close', "Close app")
  ),
  server = function(input, output) {
    observe({
      if (input$close > 0) stopApp()
    })
  }
))

但是,这不会自动关闭浏览器窗口(除非您使用 RStudio 的内置浏览器窗口进行查看)。为此,您需要向 actionButton 添加一些 Javascript。

runApp(list(
  ui = bootstrapPage(
    tags$button(
      id = 'close',
      type = "button",
      class = "btn action-button",
      onclick = "setTimeout(function(){window.close();},500);",
      "Close window"
    )
  ),
  server = function(input, output) {
    observe({
      if (input$close > 0) stopApp()
    })
  }
))

当然,当用户以其他方式关闭窗口时,这不会停止应用程序。我相信也可以在浏览器中检测窗口关闭事件,然后您可以在那时设置一个输入值(该值发送到服务器),但我不知道它是否会到达服务器在窗口关闭并且 Javascript 停止运行之前。

关于r - session 结束时的计时事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526403/

相关文章:

r - 无法理解 "Rstudio pdf knit fails with ' 环境阴影未定义'错误”

RShiny 中的响应式(Reactive)输入 react 太快(不使用按钮)

r - 更改输入值时不要删除无功变量(用户输入的)值

r - 如何防止 Shinyapp.io 每次重新发布时更改 URL

r - 为 DT 行添加 Shiny 的背景色

R Shiny,从数据表中删除列内过滤器

r - R中的get_map可以生成分辨率高于640 x 640的 map 吗?

r - 在R中,如何提取major.minor版本号?

以簇作为颜色的 R Biplot

r - 添加 UI 元素的一部分作为 introjs() 教程的步骤