html - 如何在 Shiny App 中使用 URL 呈现 HTML 文件而不破坏其他交互式绘图和表格?

标签 html r shiny

我制作了一个 Shiny 应用程序,它连接到远程数据库 (PostgreSQL) 以提取表格,以便在我的应用程序中显示并使用表格中的值生成用户交互图(箱线图、散点图、直方图)。
该应用程序的另一部分是在应用程序中呈现托管在网站(例如 GitHub)上的 HTML 文件。
这是我使用的代码的一部分:

    output$genotyping <- renderUI({
      if (creds_reactive()$user == "Admin") {
        
      fluidPage(useShinyjs(),
                titlePanel("Github HTML file"),
                mainPanel(
                  
                  h3("Click this button to display/hide the html file"),
                  br(),
                  br(),
                  actionButton("genotype", "Click me!"),
                  hidden(
                    div(id = 'text_div',
                  htmlOutput("includeHTML")
                  ) )
                )
                
      ) }
      else {
        mainPanel(
          fluidRow(
            align = "center", 
            h3("Sorry! You don't have the permissions required to view this content.")
          )
        )
        
      }
    })
            
    request <- GET("link to html file")
    github.html <-content(request, as ="text")  
    
    observeEvent(input$genotype, {
            
        toggle('text_div')
        output$includeHTML <- renderText({github.html})
          
    })
我正在使用来自 here 的代码.
但是,它已经过时了,而且 Dropbox 已经删除了 HTML 渲染支持/禁用了一些 Java 功能,因此无法加载 HTML 文件,因此在我的代码中使用 Dropbox 链接会在我的应用程序中生成一个空白页面。因此,我使用 GitHub 来存储我的文件。文件本身比较大,所以 GitHub 本身无法渲染它。我使用了由 github 生成的原始代码的链接以及 raw.githack 来呈现带有 URL 的文件。在屏幕快速刷新后,这两个选项都能够在我的应用程序中呈现 HTML 文件。问题是,所有其他交互式表格和绘图在加载到 HTML 文件后都无法使用。任何选项卡(来自 tabsetPanel)的字体都变为红色,并且无法加载之前创建的任何表格和绘图。
我会将报告存储在本地驱动器/文件夹中,但这不是很实用,因为这只是一份报告(还会有更多,我用来运行 Shiny 服务器的 EC2 实例会变得太满)。
编辑:我应该注意到,即使将它放在本地文件夹中并使用 includeHTML 也有与使用 URL 相同的问题,所以也许这只是在 Shiny 应用程序中呈现 HTML 的问题?
我也不太确定 http 请求如何与 GET 函数配合使用。它是否创建了一个新的连接来取代原来的连接?为什么通过 URL 在 HTML 文件中渲染后不再加载我的绘图/表格?我应该断开 GET 连接吗?
我还使用了一个名为 Shinymanager 的包来创建一个带有凭据和密码的安全应用程序登录,因此我在那里使用了“if”语句来生成自定义 UI。这里也使用了 ShinyJS 来创建隐藏效果。按下按钮将显示/隐藏报告。
如果还有什么我可以提供的,请告诉我。谢谢。

最佳答案

您是否尝试过使用 iframe而不是 includeHTML ?
像这样的事情应该这样做:

library(shiny)

addResourcePath("html", file.path(R.home(), "doc", "html"))

ui <- fluidPage(
  tags$iframe(src="html/about.html", height="200px", width="100%", frameborder="0", scrolling="yes")
)

server <- function(input, output, session) {}

shinyApp(ui, server)

关于html - 如何在 Shiny App 中使用 URL 呈现 HTML 文件而不破坏其他交互式绘图和表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68897944/

相关文章:

javascript - 如何添加到 javascript 中的本地存储变量?

html - CSS:html页面外的空白

html - 将文本(2 行)与缩略图对齐

r - 在 R 中生成一个 20 位数字

r - 如何更改 R shiny 中 wordcloud 的大小以不剪切图像?

javascript - 表单内的输入问题

R:gtable 和 ggplot 对象之间的可靠转换。如何在 ggplot_build() 之后使lemmon::reposition_legend() 工作?

R iGraph : degree in the case of bidirectional edges

r - 使用操作按钮更新条件面板

R - Shiny 的包裹 - 将情节发送到 Shiny