在导航栏上单击关闭 (Chrome) 浏览器 window
close (Chrome) browser window on navbar click
我一直在使用方法 suggested by @wch on SO 在 Shiny 应用程序中单击操作按钮时关闭浏览器 window。效果很好。
我现在想停止我的应用程序 并且 在单击导航栏中的元素时关闭浏览器 window(在 Chrome 中)。在我正在使用的 tabPanel 调用下方
tabPanel(title = "", value = "Stop", icon = icon("power-off"))
我使用观察器在 input$navbar == "Stop"
的值(即选择导航栏中的图标时)时停止应用程序,但我不确定如何激活 window.close()
调用.
用于关闭浏览器的操作按钮代码 windows @wch
tags$button(
id = 'close',
type = "button",
class = "btn action-button",
onclick = "window.close();",
"Close window"
)
编辑:
找到了满足我要求的变通方法。
tabPanel(tags$a(id = "quitApp", href = "#", class = "action-button",
list(icon("power-off"), ""), onclick = "window.close();"))
不幸的是,它会导致导航栏对齐不佳。我在 Shiny google 组
上问了一个 related question
您可以使用 shinyjs 包轻松调用 javascript 函数,这基本上就是您需要做的所有事情。免责声明:我写了那个包。这是执行您想要的操作的代码:
library(shinyjs)
jscode <- "shinyjs.closewindow = function() { window.close(); }"
runApp(shinyApp(
ui = tagList(
useShinyjs(),
extendShinyjs(text = jscode),
navbarPage(
"test",
id = "navbar",
tabPanel(title = "tab1"),
tabPanel(title = "", value = "Stop", icon = icon("power-off"))
)
),
server = function(input, output, session) {
observe({
if (input$navbar == "Stop") {
js$closewindow();
stopApp()
}
})
}
))
编辑:
如果你不想使用JS包,你可以用native shiny做同样的事情:
jscode <- "Shiny.addCustomMessageHandler('closeWindow', function(m) {window.close();});"
runApp(shinyApp(
ui = tagList(
tags$head(tags$script(HTML(jscode))),
navbarPage(
"test",
id = "navbar",
tabPanel(title = "tab1"),
tabPanel(title = "", value = "Stop", icon = icon("power-off"))
)
),
server = function(input, output, session) {
observe({
if (input$navbar == "Stop") {
session$sendCustomMessage(type = "closeWindow", message = "message")
stopApp()
}
})
}
))
我一直在使用方法 suggested by @wch on SO 在 Shiny 应用程序中单击操作按钮时关闭浏览器 window。效果很好。
我现在想停止我的应用程序 并且 在单击导航栏中的元素时关闭浏览器 window(在 Chrome 中)。在我正在使用的 tabPanel 调用下方
tabPanel(title = "", value = "Stop", icon = icon("power-off"))
我使用观察器在 input$navbar == "Stop"
的值(即选择导航栏中的图标时)时停止应用程序,但我不确定如何激活 window.close()
调用.
用于关闭浏览器的操作按钮代码 windows @wch
tags$button(
id = 'close',
type = "button",
class = "btn action-button",
onclick = "window.close();",
"Close window"
)
编辑:
找到了满足我要求的变通方法。
tabPanel(tags$a(id = "quitApp", href = "#", class = "action-button",
list(icon("power-off"), ""), onclick = "window.close();"))
不幸的是,它会导致导航栏对齐不佳。我在 Shiny google 组
上问了一个 related question您可以使用 shinyjs 包轻松调用 javascript 函数,这基本上就是您需要做的所有事情。免责声明:我写了那个包。这是执行您想要的操作的代码:
library(shinyjs)
jscode <- "shinyjs.closewindow = function() { window.close(); }"
runApp(shinyApp(
ui = tagList(
useShinyjs(),
extendShinyjs(text = jscode),
navbarPage(
"test",
id = "navbar",
tabPanel(title = "tab1"),
tabPanel(title = "", value = "Stop", icon = icon("power-off"))
)
),
server = function(input, output, session) {
observe({
if (input$navbar == "Stop") {
js$closewindow();
stopApp()
}
})
}
))
编辑:
如果你不想使用JS包,你可以用native shiny做同样的事情:
jscode <- "Shiny.addCustomMessageHandler('closeWindow', function(m) {window.close();});"
runApp(shinyApp(
ui = tagList(
tags$head(tags$script(HTML(jscode))),
navbarPage(
"test",
id = "navbar",
tabPanel(title = "tab1"),
tabPanel(title = "", value = "Stop", icon = icon("power-off"))
)
),
server = function(input, output, session) {
observe({
if (input$navbar == "Stop") {
session$sendCustomMessage(type = "closeWindow", message = "message")
stopApp()
}
})
}
))