2014-12-22 3 views
2

Я могу запустить блестящее приложение, когда Chrome-браузер уже открыт на моем рабочем столе (linux). Однако, когда мой браузер закрыт, и я запускаю блестящее приложение, он просто показывает пустую страницу и «ожидание 127.0.0.1 ...» в нижней строке состояния. Другими словами, он запускает хром, но не показывает блестящее содержимое приложения. Вот мой код:Браузер Chrome не отображает страницу, если не открыт в Shiny

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, однако, это выглядит как блестящий не отвечает по какой-то причине ...

+0

Что делать, если из кода вы запускаете хром и запускаете приложение в этом окне? Предполагаю, что 127.0.0.1 - это ваша локальная машина или машина, на которой работает ваше блестящее приложение? – CalebB

+0

Спасибо за предложение, но я бы предпочел не работать. Блестящий должен иметь возможность запускать браузер на основе документации, которую я прочитал. Тем не менее, есть что-то, что заставляет его не запускаться, даже если одна и та же команда запуска отлично работает за пределами Shiny. –

ответ

1

Ответил блестящими GitHub люди:

" Это связано с проблемой с вашим сценарием оболочки.

Чтобы запустить браузер в фоновом режиме, вам необходимо добавить &. В противном случае после запуска браузера браузера браузер не вернет управление в R до тех пор, пока браузер не будет конец процесса.

Причина, по которой это не проблема, когда хром уже открыт, потому что c hromium по-разному реагирует на команду, если браузер уже открыт - он всегда возвращается немедленно, даже если команда не имеет &. "

Update

Вот точный сценарий я использую:

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

вы можете показать мне исправленный сценарий оболочки? У меня такая же проблема прямо сейчас. –

+0

Возможно, полезно знать, что некоторые люди перестают предлагать использовать Chrome, например. см. [Desktop DeployR] (https://www.r-bloggers.com/desktop-deployr/). – Oliver

1

Для меня ответ предложил Джону не работать. Не знаю, почему ... возможно, некоторые настройки Chrome изменились с декабря 2014 года.

Что в моем случае было использовать 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) 
} 
Смежные вопросы