如何在 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 不工作,请使用 link 到 js-cookie github 下载并用您的本地副本替换脚本。
这里的技巧是将信息存储在浏览器的 cookie 中。每次用户访问时,先获取cookie,再决定是否显示模态。
此方法只会向每个用户显示一次模态,即使他们刷新浏览器,它也不会再次出现.
您需要打开 cookie 设置以清除当前 cookie 才能再次看到模态。这里我以Chrome为例。
我喜欢在 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 不工作,请使用 link 到 js-cookie github 下载并用您的本地副本替换脚本。
这里的技巧是将信息存储在浏览器的 cookie 中。每次用户访问时,先获取cookie,再决定是否显示模态。
此方法只会向每个用户显示一次模态,即使他们刷新浏览器,它也不会再次出现.
您需要打开 cookie 设置以清除当前 cookie 才能再次看到模态。这里我以Chrome为例。