在Shiny中如何将新标签页打开链接改为当前页内弹窗打开?
实现Shiny点击按钮当前页弹窗打开URL的方案
共有两种常用实现方式,可根据需求选择:
方案1:Shiny原生模态框内嵌iframe(推荐)
这种方式是在当前页面弹出模态层,直接在层内加载目标URL,完全不需要跳走,交互更连贯。
注意:部分公共网站(如谷歌)设置了
X-Frame-Options禁止嵌入,内部自定义站点无此限制,测试时可替换为允许iframe嵌入的站点验证效果。
library(shiny) ui <- fluidPage( shiny::fluidRow( shiny::actionButton(inputId='ab1', label="click here", value = "Open popup") ) ) server <- function(input, output) { # 监听按钮点击事件 observeEvent(input$ab1, { showModal(modalDialog( title = "弹出窗口", # 嵌入iframe加载目标URL,自定义宽高 tags$iframe(src = "http://google.com", width = "100%", height = "600px", frameBorder = "0"), size = "l", # 模态框尺寸,可选s/m/l easyClose = TRUE # 点击模态框外区域可关闭 )) }) } shinyApp(ui, server)
方案2:浏览器独立小弹窗
如果需要打开独立于当前Shiny页面的小窗口,不需要嵌在页面内,可以直接修改原代码的window.open参数,取消_blank配置,新增窗口尺寸控制参数即可:
library(shiny) ui <- fluidPage(shiny::fluidRow(shiny::actionButton(inputId='ab1', label="click here", value = "Open popup",onclick ="window.open('http://google.com','customPopup','width=800,height=600,top=100,left=100')"))) server <- function(input, output) {} shinyApp(ui, server)
参数里的width、height、top、left可以自定义调整弹窗的大小和弹出位置。
内容的提问来源于stack exchange,提问作者Fariya
相关产品推荐
相关产品推荐

