Force загружает pdf-ссылку, используя javascript/ajax/jquery

предположим, что у нас есть ссылка в формате pdf http://manuals.info.apple.com/en/iphone_user_guide.pdf" (например, чтобы вы знали, что файл отсутствует на моем сервере, у меня есть только ссылка)... теперь я должен предоставить кнопку на моем сайте, которая будет загружать файл.

Я пробовал различные вещи, такие как window.open, href и т.д., но он открывает ссылку в другом окне. я знаю, потому что теперь у всех браузеров есть плагин adobe, который открывает его в другом окне, но все равно разве я не предоставляю пользователю возможность загрузки, а не открывать его, используя скрипты на стороне клиента.

помощь plz.. спасибо

Ответ 1

Используйте HTML5 атрибут "скачать"

<a href="iphone_user_guide.pdf" download="iPhone User Guide.PDF">click me</a>

Предупреждение: на момент написания статьи не работает в IE/Safari, см.: caniuse.com/#search=download

Изменение: Если вы ищете реальное решение JavaScript, пожалуйста, смотрите Lajarre ответ

Ответ 2

Вот решение Javascript (для таких людей, как я, которые искали ответ на заголовок):

function SaveToDisk(fileURL, fileName) {
    // for non-IE
    if (!window.ActiveXObject) {
        var save = document.createElement('a');
        save.href = fileURL;
        save.target = '_blank';
        save.download = fileName || 'unknown';

        var evt = new MouseEvent('click', {
            'view': window,
            'bubbles': true,
            'cancelable': false
        });
        save.dispatchEvent(evt);

        (window.URL || window.webkitURL).revokeObjectURL(save.href);
    }

    // for IE < 11
    else if ( !! window.ActiveXObject && document.execCommand)     {
        var _window = window.open(fileURL, '_blank');
        _window.document.close();
        _window.document.execCommand('SaveAs', true, fileName || fileURL)
        _window.close();
    }
}

источник: http://muaz-khan.blogspot.fr/2012/10/save-files-on-disk-using-javascript-or.html

К сожалению, для меня работает IE11, который не принимает новый MouseEvent. В этом случае я использую следующее:

//...
try {
    var evt = new MouseEvent(...);
} catch (e) {
    window.open(fileURL, fileName);
}
//...

Ответ 3

С JavaScript очень сложно, если не невозможно (?). Я бы предложил использовать какой-то язык с кодом, например PHP, С# или Java. Если бы вы использовали PHP, вы могли бы на странице, на которую отправляется ваша кнопка, сделать что-то вроде этого:

<?php
header('Content-type: application/pdf');
header('Content-disposition: attachment; filename=filename.pdf');
readfile("http://manuals.info.apple.com/en/iphone_user_guide.pdf");
?>

Это также работает для JS (от http://www.phpbuilder.com/board/showthread.php?t=10149735):

<body>
<script>
function downloadme(x){
myTempWindow = window.open(x,'','left=10000,screenX=10000');
myTempWindow.document.execCommand('SaveAs','null','download.pdf');
myTempWindow.close();
}
</script>

<a href=javascript:downloadme('http://manuals.info.apple.com/en/iphone_user_guide.pdf');>Download this pdf</a>
</body>

Ответ 4

Если htaccess является опцией, это приведет к загрузке всех файлов PDF вместо открытия в браузере.

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

Ответ 5

Вот прекрасный пример загрузки файла с использованием javaScript.

Использование: download_file(fileURL, fileName);

Ответ 6

В javascript используйте метод preventDefault() параметра args события.

<a href="no-script.html">Download now!</a>

$('a').click(function(e) {
    e.preventDefault(); // stop the browser from following
    window.location.href = 'downloads/file.pdf';
});