【问题标题】:Chrome browser does not display page unless already open in ShinyChrome 浏览器不显示页面,除非已经在 Shiny 中打开
【发布时间】:2015-02-20 23:07:08
【问题描述】:

当 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 *

我已验证浏览器可以正常启动并转到闪亮之外的指定 URL:

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,但是,看起来闪亮由于某种原因没有响应......

【问题讨论】:

  • 如果从代码中启动 chrome 然后在该窗口中启动应用程序会怎样?我假设 127.0.0.1 是您的本地计算机还是运行闪亮应用程序的计算机?
  • 感谢您的建议,但我宁愿不必做任何工作。 Shiny 应该能够根据我阅读的文档启动浏览器。但是,即使相同的启动命令在 Shiny 之外可以正常工作,也有一些原因导致它无法启动

标签: shiny shiny-server


【解决方案1】:

由闪亮的 github 人回答:

"这是由于您的 shell 脚本有问题。

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

铬已经打开时没有问题的原因是,如果浏览器已经打开,铬对命令的响应不同——它总是立即返回,即使命令没有 &。"

更新

这是我使用的确切脚本:

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))
}

【讨论】:

  • 你能给我看看更正的shell脚本吗?我现在也有同样的问题。
  • 知道有些人不再建议使用 Chrome 可能很有用,例如见Desktop DeployR
【解决方案2】:

对我来说,约翰建议的答案不起作用。不知道为什么……也许某些 Chrome 设置自 2014 年 12 月以来发生了变化。

在我的案例中起作用的是使用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)
}

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多