Альтернатива для атрибута «Загружать» тега Html Anchor, который не работает в Internet Explorer [дубликат]

Обертка вокруг GNU ld, которая не поддерживает скрипты компоновщика

. Некоторые .so-файлы на самом деле являются GNU ld ссылками-компоновщиками , например. Файл libtbb.so является текстовым файлом ASCII с этим содержимым:

INPUT (libtbb.so.2)

Некоторые более сложные сборки могут не поддерживать это. Например, если вы включаете -v в параметры компилятора, вы можете видеть, что mainwin gcc wrapper mwdip отбрасывает файлы команд сценария компоновщика в подробном списке результатов библиотек для ссылки. Простая работа вместо файла командной строки ввода сценария компоновщика вместо копии (или символической ссылки), например

cp libtbb.so.2 libtbb.so

Или вы можете заменить аргумент -l полным путем .so, например вместо -ltbb сделать /home/foo/tbb-4.3/linux/lib/intel64/gcc4.4/libtbb.so.2

25
задан EricLaw 23 August 2013 в 17:53
поделиться

7 ответов

Internet Explorer в настоящее время не поддерживает атрибут Download в тегах A.

См. http://caniuse.com/download и http://status.modern.ie/adownloadattribute ; последнее указывает на то, что функция «Рассматривается» для IE12.

22
ответ дан EricLaw 31 August 2018 в 16:49
поделиться

Этот фрагмент кода позволяет сохранять blob в файле в IE, Edge и других современных браузерах.

var request = new XMLHttpRequest();
request.onreadystatechange = function() {

    if (request.readyState === 4 && request.status === 200) {

        // Extract filename form response using regex
        var filename = "";
        var disposition = request.getResponseHeader('Content-Disposition');
        if (disposition && disposition.indexOf('attachment') !== -1) {
            var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
            var matches = filenameRegex.exec(disposition);
            if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
        }

        if (window.navigator.msSaveOrOpenBlob) { // for IE and Edge
            window.navigator.msSaveBlob(request.response, filename);
        } else {
            // for modern browsers
            var a = document.createElement('a');
            a.href = window.URL.createObjectURL(request.response);
            a.download = filename;
            a.style.display = 'none';
            document.body.appendChild(a);
            a.click();
        }
    }

    button.disabled = false;
    dragArea.removeAttribute('spinner-visible');
    // spinner.style.display = "none";

};
request.open("POST", "download");
request.responseType = 'blob';
request.send(formData);

Для использования IE и Edge: msSaveBlob

1
ответ дан Alex 31 August 2018 в 16:49
поделиться

В моем случае, поскольку есть требование поддержать использование IE 11 (версия 11.0.9600.18665), я закончил использование решения, предоставленного @Henners в его комментарии:

// IE10+ : (has Blob, but not a[download] or URL)
if (navigator.msSaveBlob) {
    return navigator.msSaveBlob(blob, fileName);
}

Это довольно просто и практично.

По-видимому, это решение было найдено в функции загрузки javascript , созданной dandavis .

11
ответ дан aribeiro 31 August 2018 в 16:49
поделиться

Старый вопрос, но я подумал, что добавлю наше решение. Вот код, который я использовал в своем последнем проекте. Это не идеально, но оно передало QA во всех браузерах и IE9 +.

downloadCSV(data,fileName){
  var blob = new Blob([data], {type:  "text/plain;charset=utf-8;"});
  var anchor = angular.element('<a/>');

  if (window.navigator.msSaveBlob) { // IE
    window.navigator.msSaveOrOpenBlob(blob, fileName)
  } else if (navigator.userAgent.search("Firefox") !== -1) { // Firefox
    anchor.css({display: 'none'});
    angular.element(document.body).append(anchor);

    anchor.attr({
      href: 'data:attachment/csv;charset=utf-8,' + encodeURIComponent(data),
      target: '_blank',
      download: fileName
    })[0].click();

    anchor.remove();
  } else { // Chrome
    anchor.attr({
      href: URL.createObjectURL(blob),
      target: '_blank',
      download: fileName
    })[0].click();
  }
}

Использование API с определенными метрами работало лучше всего для нас в IE. Также обратите внимание, что некоторым браузерам требуется, чтобы якорь фактически находился в DOM для использования атрибута загрузки, в то время как Chrome, например, этого не делает. Кроме того, мы обнаружили некоторые несоответствия в том, как Blobs работают в разных браузерах. Некоторые браузеры также имеют ограничение на экспорт. Это позволяет максимально возможный экспорт CSV в каждом браузере afaik.

9
ответ дан Kevin 31 August 2018 в 16:49
поделиться

Как упоминалось в более раннем ответе, атрибут загрузки не поддерживается в IE. Как работа, вы можете использовать iFrames для загрузки файла. Вот пример фрагмента кода.

function downloadFile(url){
    var oIframe = window.document.createElement('iframe');
    var $body = jQuery(document.body);
    var $oIframe = jQuery(oIframe).attr({
        src: url,
        style: 'display:none'
    });
    $body.append($oIframe);

}
0
ответ дан May13ank 31 August 2018 в 16:49
поделиться
4
ответ дан MWOJO 31 August 2018 в 16:49
поделиться

Сначала добавьте дочерний элемент, а затем нажмите

Или вы можете использовать window.location = 'url';

1
ответ дан Shadow 31 August 2018 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: