2016-09-14 73 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

相關問題