下面的应用有两个tabPanels
,每个sidebarPanel
都有一些Javascript。我希望Tab 1中的Javascript能够随时运行Tab 1(即,当我最初启动应用程序时以及从Tab 2导航回Tab 1时)。此外,我希望我导航到该选项卡的任何时候都可以运行选项卡2中的Javascript。
相反,两个选项卡的Javascript在启动应用程序后立即运行,然后再也不会运行。
作为上下文,我构建了这个示例,因为我在尝试使用Javascript在我的Shiny应用程序中放置Amazon Associates广告时遇到了这个问题。
library(shiny)
ui = navbarPage( "",
tabPanel( "Tab 1",
mainPanel(
wellPanel("Blah blah blah"),
width = 6
),
sidebarPanel(
# only runs once, like the ads
HTML('<script type="text/javascript"> alert("Tab 1 is talking"); </script>')
# # runs every time
#HTML('<b> test </b>')
, width=6 )
),
tabPanel( "Tab 2",
mainPanel(
wellPanel("Blah blah blah"),
width = 6
), # ends mainPanel
sidebarPanel(
# only runs once, like the ads
HTML('<script type="text/javascript"> alert("Tab 2 is talking"); </script>')
# # runs every time
#HTML('<b> test </b>')
, width=6 )
)
)
server <- function(input, output) {
}
app = shinyApp( ui, server )
答案 0 :(得分:1)
标签仅切换页面上已有内容的可见性。因此,当应用程序启动时,Tab 2实际上已加载但隐藏了。如果您希望选项卡动态添加和删除脚本,则可以使用renderUI
根据活动选项卡执行此操作。或sendCustomMessage
和addCustomMessageHandler
。
以下是使用renderUI
的示例:
library(shiny)
ui = navbarPage("", id = "navbar",
tabPanel( "Tab 1",
mainPanel(
wellPanel("Blah blah blah"),
width = 6
),
sidebarPanel(
uiOutput("tab1"),
width = 6
)
),
tabPanel( "Tab 2",
mainPanel(
wellPanel("Blah blah blah"),
width = 6
),
sidebarPanel(
uiOutput("tab2"),
width=6
)
)
)
server <- function(input, output) {
output$tab1 <- renderUI({
req(input$navbar == "Tab 1")
HTML('<script type="text/javascript"> alert("Tab 1 is talking"); </script>')
})
output$tab2 <- renderUI({
req(input$navbar == "Tab 2")
HTML('<script type="text/javascript"> alert("Tab 2 is talking"); </script>')
})
}
shinyApp( ui, server )