简体   繁体   中英

How to stop end shiny session by closing the browser

I have a shiny app that I would like to end the session every time, I close the browser. I researched around and most developers proposed adding this snippet on my server.

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

A minimal example is provided below;

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()

the problem with this example I keep asking myself where should I place my other the other lines in the server? for instance, if I want to plot a histogram which way do I write my server?

is it

    server = function(input, output, session) {
      session$onSessionEnded(function() {
       hist(data)
        stopApp()
      })
    }
  )

or

    server = function(input, output, session) {
     hist(data)
      session$onSessionEnded(function() {
        stopApp()
      })
    }
  )

 I am just seeking a more working example 

If you want to plot your histogram while the session is active, take the second option. As mentioned by @Waldi the first option plots your histogram when the session is ended, and the user will thus never see the histogram. See here an example of the two options:

First option: we never see the table

rm(list=ls())

library(shiny)

doshiny <- function() {
    app=shinyApp(
        ui = fluidPage(
            textInput("textfield", "Insert some text", value = "SomeText"),
            dataTableOutput('table')
        ),
        server = function(input, output, session) {

            session$onSessionEnded(function() {
                output$table <- renderDataTable(iris)
                stopApp()
            })
        }
    )
    runApp(app)
}

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

openshiny()

Second option: we see the table

rm(list=ls())

library(shiny)

doshiny <- function() {
    app=shinyApp(
        ui = fluidPage(
            textInput("textfield", "Insert some text", value = "SomeText"),
            dataTableOutput('table')
        ),
        server = function(input, output, session) {
            output$table <- renderDataTable(iris)
            session$onSessionEnded(function() {

                stopApp()
            })
        }
    )
    runApp(app)
}

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

openshiny()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM