R Shiny:使用shinyjs获取cookie数据

R Shiny:使用shinyjs获取cookie数据,r,shiny,shinyjs,R,Shiny,Shinyjs,我想使用shinyjs从我闪亮的应用程序中获取cookie数据。我创建了一个cookie,“samplecookie=testval”;我希望能够检索samplecookie的值。我使用下面的javascript函数(在这里我传递cookieName并返回相应的值) 函数fetchCookie(名称){ 变量nameEQ=name+“=”; var ca=document.cookie.split(“;”); 对于(变量i=0;i

我想使用shinyjs从我闪亮的应用程序中获取cookie数据。我创建了一个cookie,“samplecookie=testval”;我希望能够检索samplecookie的值。我使用下面的javascript函数(在这里我传递cookieName并返回相应的值)

函数fetchCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
下面是闪亮应用程序中的javascript代码

jsCode<-'shinyjs.tstfunc=
    function (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";
}   
}' 

ui <- shinyUI(fluidPage(mainPanel(
  useShinyjs(),
  extendShinyjs(text = jsCode)
)))

server <- function(input, output)
  {
    observe({
    x=js$tstfunc("samplecookie")
    print(x)
    })
  }

shinyApp(ui=ui, server=server)

jsCode我是shinyjs的作者。你不能像那样使用它将值从JS传递到R。将值从JS传递到R的唯一方法是使用输入。在JavaScript中,你必须调用
Shiny.onInputChange()
函数,在R中,你需要添加一个observe/reactive语句来监听正在更改的输入

您提供的代码有点奇怪,很难阅读,因此这里有一个简单的示例说明如何执行此操作。此代码只要求JavaScript将当前时间传递给R,这很简单,但它显示了如何执行此操作

library(shiny)
library(shinyjs)

jsCode <- 'shinyjs.gettime = function(params) {
  var time = Date();
  Shiny.onInputChange("jstime", time);
}' 

ui <- fluidPage(
  useShinyjs(),
  extendShinyjs(text = jsCode, functions = "gettime")
)

server <- function(input, output) {
  js$gettime()

  observe({
    cat(input$jstime)
  })
}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyjs)

jsCode@daattali有没有计划扩展
shinyjs
以支持随意返回参数?这确实非常方便。@AdamB你的意思是,你可以从javascript
return
,而shinny将收到该值?如果这是你的意思,那么这是不可能的,我看不出这是怎么可能的le(我可能错了,但我认为这种互动是不受支持的)
library(shiny)
library(shinyjs)

jsCode <- 'shinyjs.gettime = function(params) {
  var time = Date();
  Shiny.onInputChange("jstime", time);
}' 

ui <- fluidPage(
  useShinyjs(),
  extendShinyjs(text = jsCode, functions = "gettime")
)

server <- function(input, output) {
  js$gettime()

  observe({
    cat(input$jstime)
  })
}

shinyApp(ui = ui, server = server)