Подтвердить что ты не робот

Включите javascript файл в приложение Shiny

Мне нужно включить js-библиотеку в мое приложение Shiny. В настоящее время я использую includeHTML для включения script непосредственно в html-коды. например

includeHTML('URL.js')

При попытке браузера js файла браузер будет показывать "Not Found", если я использую теги $ script, например.

http://127.0.0.1:7106/URL.js

tags$script(src = 'URL.js')

Теперь я поместил URL.js в ту же папку из ui.r и server.r.

Где я должен хранить файл URL.js? Или есть другие способы включить js файл?

Спасибо за любые предложения.

4b9b3361

Ответ 1

Что вам нужно сделать:

  • создайте папку www в той же папке, что и server.R и ui.R
  • поместите файл javascript в папку www.
  • поместите tags$head(tags$script(src="hoge.js")) в пользовательский интерфейс.

Папка выглядит так:

├── server.R
├── ui.R
└── www
    └── hoge.js

ui.R что-то вроде

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel("New Application"),
  sidebarPanel(
    sliderInput("obs", 
                "Number of observations:", 
                min = 1, 
                max = 1000, 
                value = 500)
  ),
  mainPanel(
    plotOutput("distPlot"),
    tags$head(tags$script(src="hoge.js"))
  )
))

и server.R

library(shiny)
shinyServer(function(input, output) {
  output$distPlot <- renderPlot({
    dist <- rnorm(input$obs)
    hist(dist)
  })
})

Обратите внимание, что это шаблоны, сгенерированные Rstudio.

Теперь head html выглядит так:

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  ... snip ...
  <script src="shared/slider/js/jquery.slider.min.js"></script>
  <script src="hoge.js"></script>
</head>

Ответ 2

Другой способ:

includeScript("mapManipulator.js"),

Ответ 3

 └──shiny
    ├── server.R
    ├── ui.R
    └── www
        ├── stylesheet.css
        └── js
             └── hoge.js

ui.R

Либо один из них будет работать

1. tags$head(HTML("<script type='text/javascript' src='js/hoge.js'></script>"))

2. HTML('<head>
              <link rel="stylesheet" type="text/css" href="stylesheet.css">
              <script type="text/javascript" src="js/hoge.js"></script>
          </head>')

Ответ 4

Еще один вариант, который не обсуждался, заключается в том, что вы просто полностью удаляете файл ui.R, а затем кодируете все это как пользовательский HTML файл. Подробности здесь https://shiny.rstudio.com/articles/html-ui.html

В этой статье элементы формы HTML по умолчанию автоматически используются в качестве входов в server.R, но вы также можете создавать элементы пользовательского ввода (или вывода) для блестящего с помощью этого руководства https://shiny.rstudio.com/articles/building-inputs.html

Ответ 5

Мой предпочтительный способ таков:

ui.R:

    extendShinyjs(script = "app.js", functions = c("alerta")),

app.js:

shinyjs.alerta = function(text){
  alert(text);
}

server.R

  js$alerta("alerta alerta antifascista")

Вы также можете включить код, подобный этому:

ui.R после импорта библиотеки:

jsCode <- "shinyjs.alerta = function(text){alert(text);}"

ui.R внутри жидкости

extendShinyjs(text = jsCode, functions = c("alerta")),

звонок с сервера. R будет таким же