R Shiny:在页面访问时呈现 ShinyBS 模式弹出窗口(无用户操作)

R Shiny: Present a ShinyBS Modal Popup on page visit (no user action)

我之前在代码中成功使用了 bsModal。但是,我似乎无法在默认情况下仅在用户访问应用程序的第一页时弹出模式弹出窗口。我认为这样的事情会奏效,但事实并非如此。知道如何在页面访问时触发 bsModal 吗?

library(shiny)
library(shinyBS)

ui <- fluidPage(
  mainPanel(
    bsModal(id = 'startupModal', title = 'Dum Dum', trigger = '',
            size = 'large', p("here is my mumbo jumbo")),
    width = 12
  )
)

server <- function(input, output, session) {

}

shinyApp(ui = ui, server = server)

我只需要在用户访问应用程序时通过消息提醒他们,然后允许他们关闭模态弹出窗口并自由浏览应用程序的其余部分。我正在使用 Shinydashboard。所以,最终,这必须与那个一起工作。

您可以使用toggleModal从服务器手动触发弹出窗口。

library(shiny)
library(shinyBS)

ui <- fluidPage(
  mainPanel(
    bsModal(id = 'startupModal', title = 'Dum Dum', trigger = '',
            size = 'large', p("here is my mumbo jumbo")),
    width = 12
  )
)

server <- function(input, output, session) {
  toggleModal(session, "startupModal", toggle = "open")
}

shinyApp(ui = ui, server = server)

这是一个使用 JS 在从 ui 加载 "onload" 页面时触发 bsModal 的解决方案,而无需等待 server。连同提出的解决方案 以防止最终用户通过在模态外部单击或按 Esc 键意外关闭模态

library(shiny)
library(shinyBS)
bsModalNoClose <-function(...) {
     b = bsModal(...)
     b[[2]]$`data-backdrop` = "static"
     b[[2]]$`data-keyboard` = "false"
  return(b)
}


ui <- fluidPage(
       sidebarLayout(
          sidebarPanel(
              bsModalNoClose("window", "Window",
                  title="Enter Login Details",size='small',
                  textInput('username', 'Username'),
                  passwordInput('pwInp', 'Password'),
                  actionButton('butLogin', 'Login', class = 'btn action-button btn-success', icon = icon('sign-in')),
                  footer = h4(actionLink('create_account','Create an account'),align='right'),
                  tags$head(tags$style("#window .modal-footer{display:none}
                                       .modal-header .close{display:none}"),
                            tags$script("$(document).ready(function(){
                                        $('#window').modal();
                                        });")
                            ))
                  )
        ,mainPanel()
  ))

server <- function(input, output, session) {}

shinyApp(ui, server)

希望对以后的读者有所帮助。