我想在服务器中运行 JS(而不是 UI)。我知道我可以使用 runjs 函数通过闪亮js 包来做到这一点,但我想知道如何通过本机闪亮包来做到这一点。我尝试通过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)
Run Code Online (Sandbox Code Playgroud)
这适用于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)
Run Code Online (Sandbox Code Playgroud)
您只需将 jscode 值作为字符串传递给您的 javascript 消息处理程序。您只能传递字符串或对象,而不能传递可执行代码。因此,为了实际运行代码,您需要该eval()字符串。这应该有效
tags$script(
"Shiny.addCustomMessageHandler('closeWindow', function(data) {
eval(data.message)
});"
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |