【问题标题】:Include a javascript file in Shiny app在 Shiny 应用程序中包含一个 javascript 文件
【发布时间】:2014-06-29 05:44:35
【问题描述】:

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

includeHTML('URL.js')

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

http://127.0.0.1:7106/URL.js

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

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

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

感谢您的任何建议。

【问题讨论】:

    标签: javascript r shiny


    【解决方案1】:

    你需要做的是:

    1. 在与server.Rui.R 相同的文件夹中创建www 文件夹
    2. 将javascript文件放入www文件夹。
    3. 在 UI 中输入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>
    

    【讨论】:

    • 或者使用includeScript,它接受一个参数path作为Shiny应用程序目录的基本路径。 includeScript 但是会将 javascript 从文件内联放置。
    • 谢谢@kohske。这正是我所需要的。
    • 你认为有可能为一个闪亮的应用程序做广告吗?
    • 是否可以在所有脚本的第一个位置添加脚本在所有包脚本之前?例如,我想制作一个包含多层的传单地图,所以我需要在添加 &lt;script src="leaflet.js"&gt;&lt;/script&gt; 之前添加 &lt;script&gt;L_PREFER_CANVAS = true;&lt;/script&gt;,但您提供的解决方案在末尾添加脚本
    【解决方案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);
          }
          

          服务器.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 的调用将是相同的

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-08
            • 1970-01-01
            • 2014-09-12
            • 1970-01-01
            • 2023-03-18
            • 1970-01-01
            • 1970-01-01
            • 2013-12-01
            相关资源
            最近更新 更多