【问题标题】:Run Javascript in Shiny在 Shiny 中运行 Javascript
【发布时间】:2021-06-14 23:20:19
【问题描述】:

我想在服务器(而不是 UI)中运行 JS。我知道我可以使用 runjs 函数通过 shinyjs 包做到这一点,但我想知道如何通过本机闪亮包做到这一点。我通过session$sendCustomMessage()Shiny.addCustomMessageHandler( ) 尝试过,但它不起作用。

我的尝试

library(shiny)
library(shinydashboard)

jscode <- "
  window.close();
"

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    actionButton("close", "Close app"),
    tags$script(
      "Shiny.addCustomMessageHandler('closeWindow', function(data) {
       data.message
      });"
    )
  ) 
)

server = function(input, output, session) {
  observeEvent(input$close, {
    
    session$sendCustomMessage(type = "closeWindow", list(message = jscode))

  })
}

runApp(list(ui = ui, server = server), launch.browser =T)

这适用于 shinyjs

library(shiny)
library(shinydashboard)
library(shinyjs)

jscode <- "
  window.close();
"

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    shinyjs::useShinyjs(),
    actionButton("close", "Close app")
  ) 
)

server = function(input, output, session) {
  observeEvent(input$close, {
    
    runjs(jscode)
    
  })
}

runApp(list(ui = ui, server = server), launch.browser =T)

【问题讨论】:

  • 这个JS代码关闭窗口。窗口位于 UI 中。这个 JS 代码应该在“UI”中运行

标签: r shiny shinyjs


【解决方案1】:

您只是将 jscode 值作为字符串传递给您的 javascript 消息处理程序。您只能传递字符串或对象,不能传递可执行代码。因此,为了实际运行代码,您需要eval() 字符串。这应该工作

    tags$script(
      "Shiny.addCustomMessageHandler('closeWindow', function(data) {
       eval(data.message)
      });"
    )

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 2021-09-29
    • 2021-11-22
    • 2019-03-05
    • 2021-01-01
    • 2021-08-02
    • 2019-07-01
    • 2022-10-15
    • 2021-03-29
    相关资源
    最近更新 更多