![](/img/trans.png)
[英]R Shiny: Present a ShinyBS Modal Popup on page visit (no user action)
[英]How to show a (modal) popup only once per user in R/Shiny?
我喜欢在 R/Shiny 应用程序中显示一个弹出窗口,但每个用户只显示一次(有点像 GDPR cookie 横幅)。 shinyalert
看起来很棒,但它似乎不支持设置 cookie 以仅显示一次弹出窗口。 我怎样才能轻松做到这一点? 有没有不需要编写额外的 JavaScript 函数的实现?
这是您如何做到的。 该演示使用了一个名为“ js-cookie ”的 js 库,这是一个简单的 API 来获取和设置 cookie。 无需使用额外的 R 包。
library(shiny)
ui <- fluidPage(
HTML('<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script>'),
tags$script(HTML(
'
$(document).on("shiny:connected", function(){
var newUser = Cookies.get("new_user");
if(newUser === "false") return;
Shiny.setInputValue("new_user", true);
Cookies.set("new_user", false);
});
'
))
)
server <- function(input, output, session) {
observeEvent(input$new_user, {
req(input$new_user)
showModal(modalDialog(
easyClose = TRUE, footer = NULL,
h1("Welcome new user!")
))
})
}
shinyApp(ui, server)
如果 CDN 不起作用,请使用 js-cookie github 下载链接并将脚本替换为您的本地副本。
这里的技巧是您将信息存储在浏览器的 cookie 中。 每次用户访问时,先获取 cookie,然后决定是否显示模态。
此方法只会向每个用户显示一次模态,即使他们刷新浏览器,也不会再次出现。
您需要打开 cookie 设置以清除当前的 cookie,以便再次查看模态。 这里我以 Chrome 为例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.