我包括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() is not a function.
这是为什么?
我还加载d3
在头上tags$head(tags$script(src="d3.v3.min.js"))
。
当我尝试 d3.select...
在控制台中,我也得到了
d3 is not a function.
但是,我使用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")
)
)
)
server.R
library(shiny)
shinyServer(function(input, output) {
})
创建一个www
文件夹位于 server.R
的同一目录中和ui.R
并保存 js
文件名为 test.js
包含以下内容:
console.log("This will cause error")
现在,继续打开控制台。 它说
console.log() is not a function
尝试在浏览器的控制台中输入 d3
。它说
d3 is not a function.
最佳答案
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")
}
)
关于javascript - 为什么 console.log 不是 Shiny for R 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39500299/