#javascript #html #jquery #download
#javascript #HTML
Вопрос:
Одной из новых функций, реализованных в HTML5, является download
атрибут для тегов привязки. Преимущество этого атрибута в том, что он дает пользователям возможность загружать контент, созданный в клиентском приложении, например, изображение (преобразованное из холста, например).
В настоящее время поддержка этой функции очень слабая, поэтому я хотел бы знать, как я могу обнаружить поддержку этой функции в браузере.
Комментарии:
1. Для тех, кому интересно, эта функция активно поддерживается с 2022 года: caniuse.com/?search=download attribute a
Ответ №1:
Используйте подход Modernizr: создайте элемент и проверьте, определен ли атрибут:
var a = document.createElement('a');
if (typeof a.download != "undefined") {
alert('has support');
}
Комментарии:
1. Или короткая версия
var downloadAttrSupported = ("download" in document.createElement("a"))
2. Я предложил включить сам Modernizr, но это действительно может быть лучше, если это для одного единственного случая использования.
3. @dbaseman На самом деле, «undefined» — это стандартная реализация. Насколько мне известно, ничего другого нет, поэтому проверка того, является ли «(typeof X == ‘undefined’)» или нет, — это правильный путь. В любом случае, большое спасибо за ответ! Это решило мою проблему 🙂
4. Похоже, что это решение больше не работает; современные версии Firefox, похоже, имеют
a.download
defined, но не используют его.5. @McGarnagle: использование консоли в Firefox 26 для выполнения
document.createElement('a').target
возвращает пустую строку на моем Mac, а не «неопределенную». Я пытаюсь загрузить URL-адрес данных, так что, вероятно, он не подпадает под категорию «того же происхождения»…
Ответ №2:
Однострочное if
условие для упрощения:
if (document.createElement('a').download==undefined amp;amp; e.target.hasAttribute('download'))
{
e.preventDefault();
console.log('Error: this is a download link, please right-click to save the file.');
}
Поддержка download
атрибута неоднородна (Chrome 14 , Firefox 20 , IE13 , Safari 10 и нет поддержки в (реальной) Opera. Приведенный выше сценарий не будет мешать работе поддерживаемых браузеров.