web-dev-qa-db-fra.com

Inclure un fichier javascript dans l'application Shiny

J'ai besoin d'inclure une bibliothèque js dans mon application Shiny. Actuellement, j'utilise includeHTML pour inclure le script directement dans les codes html. par exemple. 

includeHTML('URL.js')

Le navigateur affiche "Introuvable" lorsque j'essaie d'explorer le fichier js si j'utilise les balises $ script, par exemple.

http://127.0.0.1:7106/URL.js

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

Maintenant, je mets URL.js dans le même dossier que ui.r et server.r. 

Où dois-je stocker le fichier URL.js? Ou existe-t-il d'autres moyens d'inclure un fichier js?

Merci pour toutes les suggestions.

31
Bangyou

Ce que vous devez faire c'est:

  1. créer un dossier www dans le même dossier que server.R et ui.R
  2. mettre le fichier javascript dans le dossier www.
  3. mettez tags$head(tags$script(src="hoge.js")) dans l'interface utilisateur.

Le dossier ressemble à:

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

Le ui.R est quelque chose comme

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

et server.R

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

Notez que ce sont des modèles générés par Rstudio.

head of html ressemble maintenant à:

<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>
49
kohske

Une autre façon consiste à utiliser:

includeScript("mapManipulator.js"),
8
Stanislav
 └──shiny
    ├── server.R
    ├── ui.R
    └── www
        ├── stylesheet.css
        └── js
             └── hoge.js

ui.R

L'un ou l'autre fonctionnera

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>')
3
Sathish

Une autre option qui n’a pas encore été abordée consiste à supprimer complètement le fichier ui.R, puis à coder l’ensemble en tant que fichier HTML personnalisé. Détails ici https://shiny.rstudio.com/articles/html-ui.html

Dans cet article, les éléments de formulaire HTML par défaut sont automatiquement utilisés comme entrées dans server.R, mais vous pouvez également créer des éléments d’entrée (ou de sortie) personnalisés pour les plus brillants avec ce guide https://shiny.rstudio.com/articles/ building-inputs.html

1
Colin D

Ma manière préférée est comme ceci:

ui.R:

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

app.js:

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

serveur.R

  js$alerta("alerta alerta antifascista")

Vous pouvez également inclure un code comme ceci:

ui.R après l'importation de la bibliothèque:

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

ui.R dans fluidPage:

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

l'appel de server.R serait le même

0
ill