为什么console.log不是Shiny for R中的函数?

时间:2016-09-14 21:59:25

标签: javascript r d3.js shiny

我在JavaScript中添加了Shinys ui.R,如下所示:

tags$body(tags$script(src="someJs.js"))

在我someJs.js内我有一个功能

function someFunc1() {
    ....;
}

... some more code ...

console.log(variable1);

console.log是函数soemFunc1() 。 当我启动应用程序并查看控制台时,我得到了

  

console.log()不是一个函数。

为什么?

我还在头d3中加载tags$head(tags$script(src="d3.v3.min.js"))。 当我在控制台中尝试d3.select...时,我也得到了

  

d3不是一个功能。

但是,我在我的应用中使用d3进行样式设置。

Shinyjs做什么。是否存在将所有内容附加到的对象?!

这是一个容易重现的例子。

ui.R

library(shiny)

shinyUI(fluidPage(
    tags$head(tags$script(src="https://d3js.org/d3.v3.min.js")),
    tags$head(tags$script(src="test.js")),
            mainPanel(
                    tags$div(id = "test", "test test test")
            )
    )

server.R

library(shiny)

shinyServer(function(input, output) {

})

wwwserver.R所在的同一目录中创建一个ui.R文件夹,并保存名为js的{​​{1}}文件,其中包含以下内容:

test.js

现在,继续打开控制台。 它说

  

console.log()不是函数

尝试输入浏览器console.log("This will cause error") 的控制台。它说

  

d3不是一个功能。

2 个答案:

答案 0 :(得分:3)

console.log()是一个JavaScript函数,所以你不能在R-Shiny中调用它并期望它在JavaScript中运行。你必须明确告诉Shiny用JavaScript进行调用。

由于这对我来说是一个相当常见的操作,我将它包含在包shinyjs中,你可以调用R中的logjs()函数,它会将输出写入javascript控制台。

示例:

shinyApp(
    ui = fluidPage(
        shinyjs::useShinyjs() # Set up shinyjs
    ),
    server = function(input, output) {
        shinyjs::logjs("hello")
    }
)

答案 1 :(得分:2)

我不确定我是否完全理解您要做的事情,但如果您尝试在JavaScript中使用console.log()来查看JavaScript控制台中的内容,那么您就不应该一个问题:

library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
      tags$script(HTML(
        "console.log('Here is some text');"
        ))
  )
)
)

server <- shinyServer(function(input, output, session) {

})
# Run the application
shinyApp(ui = ui, server = server)

如果您运行此操作,然后使用Chrome或RStudio的网络浏览器检查页面,然后点击控制台,它将为您提供JavaScript控制台,您将看到console.log()功能的输出。

如果要打印到R控制台,则必须使用服务器中的printcat