【问题标题】:Identify user web browser information in Shiny Server在 Shiny Server 中识别用户 Web 浏览器信息
【发布时间】:2015-05-05 20:19:15
【问题描述】:

在 Shiny Server 中,我可以通过session$clientData 获取有关客户端的一些信息。在我当前的项目中,我正在使用

parseQueryString(session$clientData$url_search)

获取 URL 中的参数。我也希望能够获取网络浏览器信息(谷歌为分析收集的信息类型)。虽然我可能知道如何在 ASP.NET 或 PHP(可能是 JS)中做到这一点,但我不太清楚如何将我自己的 JS 编织到 Shiny 应用程序并将结果信息传递给变量。

如何获取与网页请求一起发送的浏览器信息?

【问题讨论】:

  • 如果你可以用 JS 做,here 是一篇解释如何在 Shiny 中使用它的文章。

标签: r shiny shiny-server


【解决方案1】:

这是一个使用来自this answer 的JS 函数的小例子。从 cmets 看来,这个解决方案并不完美,但却是一个很好的起点。

library(shiny)

js <- "
// execute the code after the shiny session has started
$(document).on('shiny:sessioninitialized', function(event) {
  // browser detection from https://stackoverflow.com/a/5918791/8099834
  navigator.sayswho= (function(){
    var ua= navigator.userAgent, tem, 
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\\brv[ :]+(\\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\\b(OPR|Edge)\\/(\\d+)/);
        if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\\/(\\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
  })(); 
  // pass browser info from JS to R
  Shiny.onInputChange('myBrowser', navigator.sayswho); 
});
"

ui <- fluidPage(
  tags$head(
      tags$script(HTML(js))
  ),
  textOutput("myBrowserOutput")
)

server <- function(input, output, session) {

  output$myBrowserOutput <- renderText({
      input$myBrowser # contains the value returned by the JS function
  })

}

shinyApp(ui, server)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2011-02-17
    • 2020-08-12
    相关资源
    最近更新 更多