我在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
进行样式设置。
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
的{{1}}文件,其中包含以下内容:
test.js
现在,继续打开控制台。 它说
console.log()不是函数
尝试输入浏览器console.log("This will cause error")
的控制台。它说
d3不是一个功能。
答案 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控制台,则必须使用服务器中的print
或cat
。