在 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 浏览器信息的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny on Ubuntu Server:用户无法在Windows平台中打开文件夹
了解 Shiny Server 上托管的 R Shiny 应用程序的可扩展性