2015-11-23 54 views
1

我開始使用Shiny和愛它。但是,我已經找到了將JavaScript融入到Shiny應用程序中以增加一些附加功能的絆腳石。希望得到一些幫助。在cookie中閱讀使用嵌入式javascript的閃亮應用程序

這是一個非常基本的Shiny應用程序,我正在使用它來測試使用javascript讀取瀏覽器cookie的可行性,以便它可以在ui.R中訪問。

ui.R代碼。

# UI file of getCookie Shiny application. 
shinyUI(fluidPage(
     titlePanel('Cookie'), 
     cookie <- tags$head(tags$script(src='readCookie.js')), 
     print(cookie) 
)) 

'script'標記附帶的JavaScript函數 - 取自quirksmode.org/js/cookies.html。

function readCookie() { 
     name = "raisinCookie"; 
     var nameEQ = name + "="; 
     var ca = document.cookie.split(';'); 
     for(var i=0;i < ca.length;i++) { 
       var c = ca[i]; 
       while (c.charAt(0)==' ') c = c.substring(1,c.length); 
       if (c.indexOf(nameEQ) == 0) return  c.substring(nameEQ.length,c.length); 
     } 
     return null; 
} 

和服務器代碼。

# Server file of getCookie Shiny application. 
shinyServer(function(input, output){ 
}) 

首先,我應該問一下,如果甚至可以讀取cookie到一個閃亮的應用程序?其次,我在這裏的正確軌道?第三 - 假設我的js代碼工作正常 - 我如何訪問js函數在源代碼中閃爍的代碼中返回的值?

任何和所有的幫助讚賞,建設性的批評。我是新來的,所以任何幫助我們整合Shiny和JS的指針都是值得歡迎的。

+1

的部分是有關您的問題來檢索所有Cookie的示例應用程序如何輕鬆整合JavaScript與閃亮,你可能想看看[shinyjs](https://github.com/daattali/shinyjs)包,特別是'extendShinyjs()'函數,它可以讓你從R調用你自己的JavaScript函數看看,這可能是有用的 –

+0

謝謝,我會的。 – Dunc

回答

2

Shinyjs可能是這種方式。

這裏是如何在一個cookie,而無需使用shinyjs閱讀:

# UI file of getCookie Shiny application. 
ui <- shinyUI(fluidPage(
    titlePanel('Cookie'), 
    tags$head(tags$script(
    HTML(' 
     Shiny.addCustomMessageHandler ("readCookie",function (message) { 
     var cookie = readCookie(message.name); 
     Shiny.onInputChange("cookie", cookie); 
     }) 

     function readCookie(name) { 
     var nameEQ = name + "="; 
     var ca = document.cookie.split(";"); 
     for(var i=0;i < ca.length;i++) { 
       var c = ca[i]; 
       while (c.charAt(0)==" ") c = c.substring(1,c.length); 
       if (c.indexOf(nameEQ) == 0) return  c.substring(nameEQ.length,c.length); 
     } 
     return "No such cookie"; 
     } 
     ') 
    )), 
    sidebarPanel(
    actionButton('readCookie','Get Cookie'), 
    textInput('cookieName','Name of cookie: ') 
    ), 
    mainPanel(
    textOutput('cookieVal') 
) 
)) 

# Server file of getCookie Shiny application. 
server <- shinyServer(function(input, output,session){ 
    observeEvent(input$readCookie,{ 
    session$sendCustomMessage(type="readCookie", 
           message=list(name=input$cookieName)) 
    }) 

    observeEvent(input$cookie,{ 
    output$cookieVal <- renderPrint({ input$cookie }) 
    }) 
}) 

shinyApp(ui=ui, server=server) 

運行

document.cookie="username=John Doe"; 

在瀏覽器控制檯創建的cookie。

+0

謝謝你的幫助奧斯卡! – Dunc

相關問題