除非已在Shiny中打开,否则Chrome浏览器不会显示页面

时间:2014-12-22 20:05:26

标签: shiny shiny-server

当Chrome浏览器已在我的桌面(linux)中打开时,我能够启动闪亮的应用程序。但是,当我的浏览器关闭,并且我启动闪亮的应用程序时,它只显示一个空白页面并在较低状态栏中“等待127.0.0.1 ...”。换句话说,它启动了chrome,但没有显示闪亮的应用内容。这是我的代码:

library(shiny)
library(shinyBS)

launch.browser = function(appUrl, browser.path='/usr/bin/chromium-browser') {
  system(sprintf('"%s" --disable-gpu --app="data:text/html,<html>
<head>
<title>Configuration</title>
</head>
<body>
<script>window.resizeTo(800,500);window.location=\'%s\';</script>
</body></html>"', browser.path, appUrl))
}

shinyApp(

  ui = fluidPage(
    fluidRow(
      br(),
      wellPanel(
        fluidRow(
          h4('User Information')
        ),
        fluidRow(
          column(4,
            textInput('Name', 'Full Name', value = "")
          ),
          column(4,
            numericInput('accNum', 'Account Number', value = "")
          ),
          column(4,
            textInput('token', 'Account Token', value = "")
          )
        )
      )
    ),

    fluidRow(
      column(12,
         actionButton('save', 'Save')
      )
    ),
    bsTooltip(id = "accNum", title = "Enter Lending Club account number", 
              placement = "bottom", trigger = "hover")
    # tags$head(tags$style(type="text/css", "#accNum {width: 100px}"))
  ), 

  server = function(input, output, session) {
    session$onSessionEnded(function() {
      stopApp()
    })
    observe({
      if (input$save == 0)
        return()
      isolate({
        j<<-input$accNum
      })
    })

  },
  options = list(launch.browser=launch.browser)
)

感谢您的帮助

*编辑1 *

我已经验证浏览器启动正常并转到闪亮的指定网址之外:

system('/usr/bin/chromium-browser --disable-gpu --app="data:text/html,<html>
<head>
<title>Configuration</title>
</head>
<body>
<script>window.resizeTo(800,500);window.location=\'http://www.facebook.com\';</script>
</body></html>"')

上面的内容也适用于使用位置facebook.com闪亮。但是,当我将其更改为appUrl参数时,它永远不会连接。我还验证了页面的来源是指向正确的127.0.0.1:3189,然而,由于某种原因看起来闪亮没有响应......

2 个答案:

答案 0 :(得分:2)

由闪亮的github人员回答:

“这是由于您的shell脚本出现问题。

您需要添加&amp;在后台运行浏览器。否则,在R启动浏览器之后,浏览器将不会将控制权返回给R,直到浏览器进程结束。

当铬已经打开时,它不是问题的原因是因为如果浏览器已经打开,铬对命令的响应不同 - 它总是立即返回,即使命令没有&amp ;.“

更新

这是我使用的确切脚本:

launch.browser = function(appUrl, browser.path=path) {
  system(sprintf('"%s" --disable-gpu --app="data:text/html,<html>
    <head>
    <title>System Configuration</title>
    </head>
    <body>
    <script>window.resizeTo(830,675);window.location=\'%s\';</script>
    </body></html>" &', browser.path, appUrl))
}

答案 1 :(得分:1)

对我来说,约翰建议的答案没有用。不确定原因......自2014年12月以来,某些Chrome设置可能已更改。

在我的案例中,有效的方法是使用shell(..., wait=FLASE)代替system(...)

launch.browser = function(appUrl, browser.path=path) {
  system(sprintf('"%s" --disable-gpu --app="data:text/html,<html>
  <head>
    <title>System Configuration</title>
  </head>
  <body>
    <script>window.resizeTo(830,675);window.location=\'%s\';</script>
  </body></html>" &', browser.path, appUrl), wait=FALSE)
}