Включите 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 файл?
Спасибо за любые предложения.
Ответы
Ответ 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 будет таким же