【发布时间】:2017-07-11 07:15:44
【问题描述】:
是否可以设置闪亮选项以在全视图模式下自动打开应用程序,即在最大化窗口中?
我的用户界面的设计方式只有在全视图浏览时才会美观。
我的源代码写在两个标准文件中:server.R 和 ui.R.
我对这两个选项都感兴趣:在 (1) RStudio 窗口和 (2) 外部浏览器中运行应用程序。
虽然在我看来这是一个自然而简单的问题,但在搜索网络时我找不到任何建议。有谁知道解决办法吗?
【问题讨论】:
是否可以设置闪亮选项以在全视图模式下自动打开应用程序,即在最大化窗口中?
我的用户界面的设计方式只有在全视图浏览时才会美观。
我的源代码写在两个标准文件中:server.R 和 ui.R.
我对这两个选项都感兴趣:在 (1) RStudio 窗口和 (2) 外部浏览器中运行应用程序。
虽然在我看来这是一个自然而简单的问题,但在搜索网络时我找不到任何建议。有谁知道解决办法吗?
【问题讨论】:
您的要求取决于浏览器,并且不能从 R 或 Shiny 中强制。对于我将应用程序部署为团队活动的会议,我有同样的要求,所有会议桌都有一个连接的平板电脑。请注意,这很困难的原因归结为安全性和网络钓鱼/社会工程的风险。关于此的一些附加信息:
您有几个选择,具体取决于您的情况,不分先后:
通过javascript
请求浏览器切换到全屏模式您可以使用Fullscreen API 来请求浏览器切换到全屏模式。这里的好处是它与浏览器和平台无关,只要浏览器支持 API。但是,这只是一个请求,不能保证按预期工作。 This 问题(和this 一个)演示了一个实现,如果你选择走这条路,你可以使用优秀的shinyjs 包。
这是一个演示使用 全屏 API 的最小示例。使用改编自 Old Faithful Geyser Data 演示应用程序。
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)
注意如果你正在实现这个,你可以选择比我非常简单的 HTML 按钮更高级的东西。需要注意的是,浏览器只有在用户发起时才允许使用 API。如果未检测到用户事件,您可能会在 javascript 控制台中找到消息
Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.。
还有screenfull.js库,它试图以更友好的方式打包API。
使用某种形式的kiosk模式部署您的应用
可以指示浏览器以 kiosk 模式(即全屏)启动,请参阅here 以了解在 Windows 上使用 Chrome 的示例。当然,这里的问题是,除非您在标准环境(如企业)中工作,否则执行起来可能会非常令人沮丧。
使用专门设计为始终使用全屏模式的浏览器
因为我的会议平台是android,所以我使用了一个应用程序(不是this,但类似),并在将此浏览器设置为默认打开页面后,在主页上放置了一个快捷链接。不理想,但它满足了我的直接要求。
接受当前状态/通知用户
鉴于可用的解决方案和安全问题存在一定程度的脆弱性,无论您选择如何解决此问题,您都可以选择接受当前状态并尽可能地布局您的应用有了这些知识。或者可能只是通知您的用户该应用已针对全屏使用进行了优化,他们可以在浏览器中按F11(或等效项)来启用它。
【讨论】:
运行全屏的另一种方法是在与 RStudio 不同的浏览器中打开您的应用。
在闪亮的应用启动按钮旁边有一个小三角形,可以打开一个下拉菜单。在此菜单中,只需单击图标即可将显示选项更改为运行外部。如果您更改为外部,则每次单击运行应用程序都会在您的默认浏览器中打开。
【讨论】: