You need to enable JavaScript to run this app. 在Shiny中如何将新标签页打开链接改为当前页内弹窗打开?
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:15:01