我已經使用類似於this answer的代碼通過ajax實現了文件下載按鈕。我有一些代碼看起來是這樣的:如何處理HTMLElement.Click()靜默失敗
$('#download-link').on('click', function (event) {
event.preventDefault();
var link = $('#download-link').attr('href');
$.ajax({
url: link,
success: function (result) {
var blob = getBlob(result);
var a = document.createElement('a');
var url = (window.URL ? URL : webkitURL).createObjectURL(blob);
a.href = url;
a.download = 'somefilename.txt';
a.style.display = 'none';
document.body.appendChild(a);
try {
a.click();
}
catch (err) {
//fallback. if .click() is unavailable display a new button for user to get file.
a.style.display = '';
a.innerText = 'Get File';
var downloadButton = document.getElementById('download-link');
downloadButton.style.display = 'none';
}
}
});
});
所以基本上,我們創建一個URL對象,與對象URL的HREF創建<a>
元素和元素上調用Click()
下載該文件。有些瀏覽器會在那個時候拋出一個錯誤,所以作爲回退,我們會捕獲錯誤並顯示創建的按鈕,以便用戶可以按下並獲取文件。
問題是,一些瀏覽器(似乎在iOS和Android的舊版本)將簡單地忽略Click()
調用。我知道我可能使用瀏覽器嗅探來處理這個,但我不認爲這是一個很好的解決方案。有什麼更優雅的,我可以做,以檢測這種情況,並使用我的後備?
哪些錯誤與一個普通的女主播? –
我認爲常見的用戶體驗模式是讓你的鏈接文本類似於「如果你的下載不開始點擊這裏」,而不是隱藏它 –
你需要ajax嗎? ($''#download-link')。attr('download','somefilename.txt')'可能根本不需要任何js – Endless