Как получить разрешение экрана из JavaScript в R Shiny?

Я хочу получить разрешение экрана из JavaScript, хранящегося в переменной GetScreenWidth на сервере Shiny.

Я попробовал ссылку:

  1. Получение данных из .js в server.Rshiny
  2. https://ryyouready.wordpress.com/2013/11/20/отправка-данных-от-клиента-на-сервер-и-обратное-использование-shiny/

Так что я:

ui.R

shinyUI(
  bootstrapPage(

    verbatimTextOutput("results")
    ,tags$script('
        var jsWidth = screen.width;
        Shiny.onInputChange("GetScreenWidth",jsWidth);
    ')
   )
 )

сервер.R

 shinyServer(function(input,output){

     output$results=renderPrint({
     input$GetScreenWidth
   })

 })

Он вернет NULL на verbatimTextOutput.

Как мне изменить код? Спасибо!


person Robin Chen    schedule 21.10.2015    source источник


Ответы (1)


Проблема в том, что вы запускаете код JavaScript до инициализации Shiny. Вы можете использовать новую функцию, которая сообщит вам, когда блестка будет готова, вот пример кода

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)
    })
  }
))
person DeanAttali    schedule 21.10.2015