6

Есть ли способ определить, поддерживает ли браузер использование URI данных для гиперссылок, кроме обнюхивания браузера?Как определить, поддерживает ли браузер URI данных для гиперссылок

Вот контекст:

Я создаю ссылку, либо загружает файл CSV из информации, полученной с помощью JavaScript, используя удобный данные URI или, если браузер не поддерживает использование URIs данных для гиперссылок, генерирует таблицу HTML желаемого содержимого.

В настоящее время мой код проверяет наличие свойства window.URL, которого нет в IE9 и ниже. (Это работает нормально сейчас, потому что пользователи IE мне нужно поддерживать работает в режиме совместимости, который эмулирует IE8.)

if(window.URL){ 
    downloadLink.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data); 
    downloadLink.setAttribute("download","download.csv"); 
}else{ 
    downloadLink.href= "#"; 
    downloadLink.innerHTML = "table view"; 
    downloadLink.onclick = function(){ 
     // build and display HTML table 
     return false; 
    }; 
} 

Однако, есть некоторые совпадения с более новыми версиями Internet Explorer (10, 11, а также Edge) в том, что они поддерживают объект window.URL, но не позволяют использовать URI для гиперссылок.

Как я могу гарантировать, что ссылка для загрузки CSV никогда не отображается в браузере, который не поддерживает такую ​​привязанность?

+0

См. Http://stackoverflow.com/questions/836777/how-to-detect-browsers-protocol-handlers, http://stackoverflow.com/questions/24779312/simplest-cross-browser-check-if- протокол-обработчик-это зарегистрированный – guest271314

ответ

0

Я считаю, что нашел ответ. Попробуйте обнаружить наличие атрибута download на элементе <a>.

var browserSupportsDataURIsForHyperlinks = 
    typeof document.createElement("a").download !== "undefined"; 

или

var browserSupportsDataURIsForHyperlinks = 
    "download" in document.createElement("a"); 

... В моем случае, я уже имел якорный тег для работы с (downloadLink), так что мне не нужно, чтобы создать новый:

if(typeof downloadLink.download !== "undefined"){ 
    downloadLink.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data); 
    downloadLink.setAttribute("download","download.csv"); 
}else{ 
    downloadLink.href= "#"; 
    downloadLink.innerHTML = "table view"; 
    downloadLink.onclick = function(){ 
     // build and display HTML table 
     return false; 
    }; 
} 

Если кто-либо видит что-то не так с этим подходом, пожалуйста, дайте мне знать.