代码之家  ›  专栏  ›  技术社区  ›  bers

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

  •  0
  • bers  · 技术社区  · 4 年前

    我喜欢在R/Shiny应用程序中显示弹出窗口,但每个用户只显示一次(有点像GDPR cookie横幅)。 shinyalert 看起来很棒,但它似乎不支持将cookie设置为只显示一次弹出窗口。我怎么能轻松做到这一点?是否有任何实现不需要编写额外的JavaScript函数?

    0 回复  |  直到 4 年前
        1
  •  2
  •   lz100    4 年前

    以下是如何做到这一点。这个演示使用了一个名为“ js-cookie “,一个容易获取和设置cookie的API。无需使用额外的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为例。

    enter image description here enter image description here

    推荐文章