I want to get screen resolution from JavaScript, stored in the GetScreenWidth
variable on Shiny Server.
I tried the reference:
So I have:
ui.R
shinyUI(
bootstrapPage(
verbatimTextOutput("results")
,tags$script('
var jsWidth = screen.width;
Shiny.onInputChange("GetScreenWidth",jsWidth);
')
)
)
server.R
shinyServer(function(input,output){
output$results=renderPrint({
input$GetScreenWidth
})
})
It will return NULL
by verbatimTextOutput
.
How should I modify the code? Thanks!
The problem is that you're running the JavaScript code before Shiny is initialized. You can use the new feature that tells you when shiny is ready, here's example code
jscode <-
'$(document).on("shiny:connected", function(e) {
var jsWidth = screen.width;
Shiny.onInputChange("GetScreenWidth",jsWidth);
});
'
library(shiny)
runApp(shinyApp(
ui = fluidPage(
tags$script(jscode)
),
server = function(input, output, session) {
observe({
cat(input$GetScreenWidth)
})
}
))