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

Sto*_*ace 1 javascript r d3.js shiny

我这样JavaScript包括:Shinys ui.R

tags$body(tags$script(src="someJs.js"))
Run Code Online (Sandbox Code Playgroud)

在我的someJs.jsI 有一个功能

function someFunc1() {
    ....;
}

... some more code ...

console.log(variable1);
Run Code Online (Sandbox Code Playgroud)

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

console.log() 不是函数。

这是为什么?

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

d3 不是函数。

不过,我d3在我的应用程序中使用它来进行样式设置。

Shiny正在做什么js。是否有一个物体可以将所有东西附着在其上?

这是一个示例,易于重现。

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")
            )
    )
Run Code Online (Sandbox Code Playgroud)

server.R

library(shiny)

shinyServer(function(input, output) {

})
Run Code Online (Sandbox Code Playgroud)

在和所在www的同一目录中创建一个文件夹,并保存一个具有以下内容的文件:server.Rui.Rjstest.js

console.log("This will cause error")
Run Code Online (Sandbox Code Playgroud)

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

console.log() 不是一个函数

尝试在浏览器的控制台中输入d3。它说

d3 不是函数。

Dea*_*ali 5

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")
    }
)
Run Code Online (Sandbox Code Playgroud)