在 R Shiny 应用程序中访问 Javascript 变量

Access Javascript Variable in R Shiny Application

我想知道是否可以在我的 R 代码中使用 runjs() 中创建的变量。 例如,我能否在 runjs() 函数之外访问变量 today_var 以进行进一步分析。

if (interactive()) {
  library(shiny)
  shinyApp(
    ui = fluidPage(
      useShinyjs(),  
      actionButton("btn", "Click me")
    ),
    server = function(input, output) {
      observeEvent(input$btn, {

        runjs("var today_var = new Date(); alert(today);")
        #print(today_var)

      })
    }
  )
}

提前致谢

有一个很棒的函数叫做 Shiny.onInputChange 它会做你想做的事

library(shiny)
library(shinyjs)
shinyApp(
  ui = fluidPage(
    useShinyjs(),  
    actionButton("btn", "Click me")
  ),
  server = function(input, output) {
    observeEvent(input$btn, {

      runjs('var today_var = new Date(); alert(today_var);Shiny.onInputChange("today_var",today_var);')
      print(input$today_var)

    })
  }
)

出于某种原因,上面的代码为我返回了 NULL

但是,按照本文中描述的过程行得通:Communicating with Shiny via JavaScript

这种方法基本上涉及首先从 javascript 代码中设置一个闪亮的输入变量,然后从闪亮的代码中响应地读取该输入值。

library(shiny)
library(shinyjs)
shinyApp(
  ui = fluidPage(
    useShinyjs(),  
    actionButton("btn", "Click me")
  ),
  server = function(input, output) {
    observeEvent(input$btn, {
      
      runjs('var today_var_js = new Date(); alert(today_var_js);
            //Shiny.onInputChange("today_var",today_var);
            
            //set shiny Input value to read reactively from R 
            Shiny.setInputValue("today_var_shiny", today_var_js);
')
      
    })
    
    #use the shiny Input value 
    #https://shiny.rstudio.com/articles/communicating-with-js.html
    observeEvent(input$today_var_shiny, { print(input$today_var_shiny) })
  }
)