在 Shiny Server 中识别用户 Web 浏览器信息

Posted

技术标签:

【中文标题】在 Shiny Server 中识别用户 Web 浏览器信息【英文标题】:Identify user web browser information in Shiny Server 【发布时间】: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 中使用它的文章。 【参考方案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://***.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)

【讨论】:

以上是关于在 Shiny Server 中识别用户 Web 浏览器信息的主要内容,如果未能解决你的问题,请参考以下文章

shiny server SparkR web展示界面

「R」Shiny:响应式编程server 函数

R Shiny on Ubuntu Server:用户无法在Windows平台中打开文件夹

了解 Shiny Server 上托管的 R Shiny 应用程序的可扩展性

尝试在 Shiny 应用程序中显示来自 SQL Server 查询的数据框时出现问题

如何使用 UDP 协议通过 Amazon 访问 Shiny-Server