繁体   English   中英

如何在 R/Shiny 中为每个用户只显示一次(模态)弹出窗口?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM