Я не уверен, что правильно понял, что вы пытаетесь сделать. Я понял, что вы хотите начать загрузку, когда строка запроса download=1
присутствует в URL-адресе. Вы можете сделать это, введя некоторый javascript, чтобы открыть ссылку, когда обнаружена искомая строка запроса. Однако будут некоторые проблемы. Ваш браузер, скорее всего, заблокирует всплывающее окно. Вам нужно будет подождать достаточно времени, прежде чем запускать код (я выбрал 5 секунд).
require(shiny)
runApp(list(
ui = bootstrapPage(
tags$head(tags$script(HTML('
Shiny.addCustomMessageHandler("jsCode",
function(message) {
eval(message.value);
}
);
'))),
downloadLink('downloadData', 'Download'),
verbatimTextOutput("summary")
),
server = function(input, output, session) {
data <- seq(100)
output$downloadData <- downloadHandler(
filename = function() {
paste('data-', Sys.Date(), '.csv', sep='')
},
content = function(file) {
write.csv(data, file)
}
)
output$summary <- renderText({
cnames <- names(session$clientData)
allvalues <- lapply(cnames, function(name) {
item <- session$clientData[[name]]
if (is.list(item)) {
list_to_string(item, name)
} else {
paste(name, item, sep=" = ")
}
})
paste(allvalues, collapse = "\n")
})
observe({
query <- parseQueryString(session$clientData$url_search)
if(!is.null(query$download)){
if(query$download == 1){
jsinject <- "setTimeout(function(){window.open($('#downloadData').attr('href'))}, 5000);"
session$sendCustomMessage(type = 'jsCode', list(value = jsinject))
}
}
})
}
))
Thanks @jdharrison! Это было именно то, что я пытался сделать :) – reinholdsson