I want to get screen resolution from JavaScript, stored in the GetScreenWidth
variable on Shiny Server.
I tried the reference:
- Receiving data from .js in server.R shiny
- /
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!
I want to get screen resolution from JavaScript, stored in the GetScreenWidth
variable on Shiny Server.
I tried the reference:
- Receiving data from .js in server.R shiny
- https://ryouready.wordpress./2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/
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!
Share Improve this question edited Jul 21, 2017 at 13:29 Badacadabra 8,5277 gold badges31 silver badges54 bronze badges asked Oct 21, 2015 at 2:42 Robin ChenRobin Chen 1033 bronze badges1 Answer
Reset to default 11The 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)
})
}
))