2016-09-14 55 views
0

我包括Shinys ui.R这样JavaScript为什么console.log不是Shiny for 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) { 

}) 

建立在同一个目录下server.Rui.Rwww文件夹并保存js文件名为test.js具有以下内容:

console.log("This will cause error") 

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

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

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

d3不是函数。

+0

R控制台或JavaScript控制台? – Carl

回答

2

我不知道我完全理解你正在尝试做的,但如果你要使用console.log()在JavaScript看到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的Web浏览器的页面,并单击控制台,它给你的JavaScript控制台,您将看到从console.log()函数的输出。

如果你想打印到R控制台,你必须从服务器使用printcat

+0

你有没有试过像我那样在'ui.R'中导入ja'.js'文件? – Stophface

+0

增加了一个可重复的例子 – Stophface

2

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") 
    } 
) 
+0

我意识到这一点。问题在于,我可以在我的问题中调用''JavaScript文件'中的'console.log()',然后将其导入'shiny'中。所以在那里,我应该能够调用'console.log()',因为它从浏览器中被解释了......你是否试图按照我的方式导入一个'js'文件? – Stophface

+0

对不起,但你写这个问题的方式很混乱,很难重现。如果您为整个应用程序代码和整个JavaScript文件提供完全可重现的最小示例,那将会更好。更好的是,不要包含一个单独的JavaScript文件,首先尝试包括JavaScript内联。否则,它会很难帮助你,因为我不能重现你所看到的错误 –

+0

我认为包括许多内联的'js'文件,这些文件有许多代码行不会使代码更易于维护。我尝试重现。马上回来 – Stophface

相关问题