Tôi không chắc mình đã hiểu chính xác những gì bạn đang cố gắng làm. Điều tôi đã hiểu là bạn muốn bắt đầu tải xuống khi chuỗi truy vấn download=1
xuất hiện trong url. Bạn có thể làm điều này bằng cách tiêm một số javascript để mở liên kết khi chuỗi truy vấn bắt buộc được phát hiện. Tuy nhiên, sẽ có một số vấn đề. Trình duyệt của bạn rất có thể sẽ chặn cửa sổ bật lên. Bạn sẽ cần phải chờ đủ thời gian trước khi bạn kích hoạt mã (tôi đã chọn 5 giây).
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))
}
}
})
}
))
Cảm ơn @jdharrison! Đây chính xác là những gì tôi đang cố gắng làm :) – reinholdsson