在Shiny应用程序中包含一个javascript文件

时间:2014-05-12 00:04:26

标签: javascript r shiny

我需要在我的Shiny应用程序中包含一个js库。目前我使用includeHTML将脚本直接包含在html代码中。例如

includeHTML('URL.js')

当我尝试浏览js文件时,如果我使用tags $ script,浏览器将显示“Not Found”,例如。

http://127.0.0.1:7106/URL.js

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

现在我将URL.js放在ui.r和server.r的同一个文件夹中。

我应该在哪里存储URL.js文件?或者还有其他方法可以包含js文件吗?

感谢您的任何建议。

5 个答案:

答案 0 :(得分:50)

您需要做的是:

  1. 在与wwwserver.R
  2. 相同的文件夹中创建ui.R文件夹
  3. 将javascript文件放入www文件夹。
  4. tags$head(tags$script(src="hoge.js"))放入用户界面。
  5. 该文件夹如下所示:

    ├── 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生成的模板。

    现在{h}的head看起来像是:

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

答案 1 :(得分:8)

另一种方法是使用:

includeScript("mapManipulator.js"),

答案 2 :(得分:5)

 └──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>')

答案 3 :(得分:1)

尚未讨论的另一个选项是您只需完全删除ui.R文件,然后将整个内容编码为自定义HTML文件。详情请https://shiny.rstudio.com/articles/html-ui.html

在本文中,默认的HTML表单元素会自动用作server.R中的输入,但您也可以使用本指南https://shiny.rstudio.com/articles/building-inputs.html

构建自定义输入(或输出)元素。

答案 4 :(得分:1)

我首选的方式是这样的:

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

来自server.R的呼叫是相同的