如何在全尺寸窗口中运行R Shiny App?

Paw*_*wel 5 r shiny

是否可以设置“闪亮”选项以全视图模式(即最大化窗口)自动打开应用程序?

我的用户界面经过精心设计,只有在以全视图浏览时才具有漂亮的外观。

我的源代码写在两个标准文件中:server.R和ui.R。

我对这两个选项都感兴趣:在(1)RStudio窗口和(2)外部浏览器中运行应用程序。

尽管在我看来这是一个自然而简单的问题,但是在搜索网络时我找不到任何建议。有人知道解决方案吗?

Kev*_*eau 5

您要求的是与浏览器相关的,不能从RShiny 强制执行。对于会议,我有相同的要求,在该会议中,我将应用程序部署为团队活动,所有会议桌都配有连接的平板电脑。请注意,很难做到这一点的原因在于安全性以及网络钓鱼 / 社会工程学的风险。有关此的一些其他信息:

根据您的情况的限制,您可以选择几种方式,而没有特定的顺序:

  1. 请求浏览器通过javascript切换到全屏模式

    有一个全屏API,你可以用它来请求浏览器切换到全屏模式。这样做的好处是,只要浏览器支持API,它就与浏览器和平台无关。但是,这只是一个请求,不能保证能够按预期工作。这个问题(和这个问题)演示了一个实现,shinyjs如果您选择沿着这一道路前进,则可以使用出色的软件包。

    这是一个演示使用全屏API的最小示例使用旧忠实间歇泉数据演示应用程序的改编版。

    应用程序

    library(shiny)
    library(shinyjs)
    
    jsToggleFS <- 'shinyjs.toggleFullScreen = function() {
        var element = document.documentElement,
          enterFS = element.requestFullscreen || element.msRequestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen,
          exitFS = document.exitFullscreen || document.msExitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen;
        if (!document.fullscreenElement && !document.msFullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {
          enterFS.call(element);
        } else {
          exitFS.call(document);
        }
      }'
    
    ui <- fluidPage(
    
      useShinyjs(),
      extendShinyjs(text = jsToggleFS),
    
      titlePanel("Old Faithful Geyser Data"),
    
      sidebarLayout(sidebarPanel(
        sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30),
        div(
          HTML("<button type='button'>Toggle Fullscreen</button>"),
          onclick = "shinyjs.toggleFullScreen();"
        )
      ),
    
      mainPanel(plotOutput("distPlot")
    
      ))
    )
    
    server <- function(input, output) {
    
      output$distPlot <- renderPlot({
        x    <- faithful[, 2]
        bins <- seq(min(x), max(x), length.out = input$bins + 1)
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
      })
    }
    
    shinyApp(ui = ui, server = server)
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果要实现此功能,则可以选择比我非常简单的HTML按钮更高级的功能。重要的是要注意,浏览器仅在用户启动时才允许使用API​​。如果未将其检测为用户事件,则可以Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.JavaScript控制台中找到该消息。

    还有一个screenfull.js库,它试图以更友好的方式打包API。

  2. 使用某种形式的信息亭模式部署您的应用

    可以指示浏览器以信息亭模式(全屏)启动,请参见此处以在Windows上使用Chrome的示例。当然,这里的问题是,除非您在标准环境(例如企业)中工作,否则执行起来可能会非常沮丧。

  3. 使用专门设计为始终使用全屏模式的浏览器

    因为我的平台是会议的android系统,所以我使用了一个应用程序(不是这个,而是类似的),并且在将该浏览器设置为默认打开页面后,在主页上放置了一个快捷链接。不理想,但是满足了我的迫切要求。

  4. 接受当前状态/通知用户

    鉴于可用的解决方案和安全性问题存在一定程度的脆弱性,无论您选择如何解决此问题,您都可以选择接受当前状态并利用此知识尽可能地布局应用。或者可能只是通知您的用户,该应用程序已针对全屏使用进行了优化,他们可以F11在浏览器中按(或等效按钮)启用该功能。