如何在全尺寸窗口中运行R Shiny应用程序



是否可以设置有光泽的选项,以自动在全视图模式下自动打开应用程序,即在最大化的窗口中?

我的用户界面的设计方式只有在浏览全视图中时才看起来很好。

我的来源写在两个标准文件中:server.r和ui.r。

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

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

您要要求的是浏览器依赖性,并且不能从 r shiny 上执行。我对我部署应用程序作为团队活动的会议也有同样的要求,所有会议桌都有连接的平板电脑。请注意,这很难取决于安全的原因以及网络钓鱼/社会工程的风险。有关此的一些其他信息:

  • 全屏规范
  • 使用HTML5全屏API进行网络钓鱼攻击-Feross.org

您有一些选择,具体取决于情况的约束,没有特别的顺序:

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

有一个全屏API 您可以使用 request 浏览器切换到完整屏幕模式。这里的好处是,只要浏览器支持API,它是浏览器和平台不可知论。但是,它只是一个请求,并且不能按预期工作。这个问题(和这个问题)证明了实现,如果您选择走这条路,则可以使用出色的shinyjs软件包。

这是一个最小的示例,证明了使用 fullscreen api。

app.r

    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)

n.b。如果要实现此目标,则可以选择比我非常简单的HTML按钮更先进的东西。重要的是要注意,如果用户启动,浏览器将仅允许使用API。您可以在 javascript 控制台中找到消息Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.,如果未检测为用户事件。

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

  1. 使用某种形式的 kiosk 模式
  2. 部署应用程序

可以指示浏览器以 kiosk mode(即 i。当然,这里的问题是,除非您在标准环境(例如企业)中工作,这可能会令人沮丧。

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

由于我的平台是Android的会议,所以我使用了一个应用程序(不是这个应用程序,但类似),并且在使此浏览器为打开页面的默认值后,我在主页上放置了一个快捷链接。不理想,但它符合我的直接要求。

  1. 接受当前状态/信息用户

鉴于脆弱性具有可用的解决方案和安全问题,无论您选择如何解决此问题,您都可以选择接受当前状态并尽可能地布局您的应用程序有了这些知识。或者可能只需通知您的用户该应用程序已优化用于使用全屏,并且可以在浏览器中按F11(或等效)来启用该应用程序。

运行全屏的一种替代方法是在与rstudio的其他浏览器中打开您的应用程序。

在闪亮的应用启动按钮旁边有一个微小的三角形,可以打开下拉菜单。在此菜单中,只需单击图标即可更改显示选项以运行外部。如果您更改为外部,每次单击运行应用程序时,都会在默认浏览器中打开。

最新更新