diff --git a/web/download_manager.js b/web/download_manager.js index 0be8a011b7a2c..87e29544d8003 100644 --- a/web/download_manager.js +++ b/web/download_manager.js @@ -25,86 +25,87 @@ factory((root.pdfjsWebDownloadManager = {}), root.pdfjsWebPDFJS); } }(this, function (exports, pdfjsLib) { -if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC || CHROME')) { - // eslint-disable-next-line no-inner-declarations - function download(blobUrl, filename) { - var a = document.createElement('a'); - if (a.click) { - // Use a.click() if available. Otherwise, Chrome might show - // "Unsafe JavaScript attempt to initiate a navigation change - // for frame with URL" and not open the PDF at all. - // Supported by (not mentioned = untested): - // - Firefox 6 - 19 (4- does not support a.click, 5 ignores a.click) - // - Chrome 19 - 26 (18- does not support a.click) - // - Opera 9 - 12.15 - // - Internet Explorer 6 - 10 - // - Safari 6 (5.1- does not support a.click) - a.href = blobUrl; - a.target = '_parent'; - // Use a.download if available. This increases the likelihood that - // the file is downloaded instead of opened by another PDF plugin. - if ('download' in a) { - a.download = filename; - } - // must be in the document for IE and recent Firefox versions. - // (otherwise .click() is ignored) - (document.body || document.documentElement).appendChild(a); - a.click(); - a.parentNode.removeChild(a); - } else { - if (window.top === window && - blobUrl.split('#')[0] === window.location.href.split('#')[0]) { - // If _parent == self, then opening an identical URL with different - // location hash will only cause a navigation, not a download. - var padCharacter = blobUrl.indexOf('?') === -1 ? '?' : '&'; - blobUrl = blobUrl.replace(/#|$/, padCharacter + '$&'); - } - window.open(blobUrl, '_parent'); +if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('FIREFOX || MOZCENTRAL')) { + return; +} + +function download(blobUrl, filename) { + var a = document.createElement('a'); + if (a.click) { + // Use a.click() if available. Otherwise, Chrome might show + // "Unsafe JavaScript attempt to initiate a navigation change + // for frame with URL" and not open the PDF at all. + // Supported by (not mentioned = untested): + // - Firefox 6 - 19 (4- does not support a.click, 5 ignores a.click) + // - Chrome 19 - 26 (18- does not support a.click) + // - Opera 9 - 12.15 + // - Internet Explorer 6 - 10 + // - Safari 6 (5.1- does not support a.click) + a.href = blobUrl; + a.target = '_parent'; + // Use a.download if available. This increases the likelihood that + // the file is downloaded instead of opened by another PDF plugin. + if ('download' in a) { + a.download = filename; } + // must be in the document for IE and recent Firefox versions. + // (otherwise .click() is ignored) + (document.body || document.documentElement).appendChild(a); + a.click(); + a.parentNode.removeChild(a); + } else { + if (window.top === window && + blobUrl.split('#')[0] === window.location.href.split('#')[0]) { + // If _parent == self, then opening an identical URL with different + // location hash will only cause a navigation, not a download. + var padCharacter = blobUrl.indexOf('?') === -1 ? '?' : '&'; + blobUrl = blobUrl.replace(/#|$/, padCharacter + '$&'); + } + window.open(blobUrl, '_parent'); } +} - function DownloadManager() {} // eslint-disable-line no-inner-declarations - - DownloadManager.prototype = { - downloadUrl: function DownloadManager_downloadUrl(url, filename) { - if (!pdfjsLib.createValidAbsoluteUrl(url, 'http://example.com')) { - return; // restricted/invalid URL - } - download(url + '#pdfjs.action=download', filename); - }, +function DownloadManager() {} - downloadData: function DownloadManager_downloadData(data, filename, - contentType) { - if (navigator.msSaveBlob) { // IE10 and above - return navigator.msSaveBlob(new Blob([data], { type: contentType }), - filename); - } +DownloadManager.prototype = { + downloadUrl: function DownloadManager_downloadUrl(url, filename) { + if (!pdfjsLib.createValidAbsoluteUrl(url, 'http://example.com')) { + return; // restricted/invalid URL + } + download(url + '#pdfjs.action=download', filename); + }, - var blobUrl = pdfjsLib.createObjectURL(data, contentType, - pdfjsLib.PDFJS.disableCreateObjectURL); - download(blobUrl, filename); - }, + downloadData: function DownloadManager_downloadData(data, filename, + contentType) { + if (navigator.msSaveBlob) { // IE10 and above + return navigator.msSaveBlob(new Blob([data], { type: contentType }), + filename); + } - download: function DownloadManager_download(blob, url, filename) { - if (navigator.msSaveBlob) { - // IE10 / IE11 - if (!navigator.msSaveBlob(blob, filename)) { - this.downloadUrl(url, filename); - } - return; - } + var blobUrl = pdfjsLib.createObjectURL(data, contentType, + pdfjsLib.PDFJS.disableCreateObjectURL); + download(blobUrl, filename); + }, - if (pdfjsLib.PDFJS.disableCreateObjectURL) { - // URL.createObjectURL is not supported + download: function DownloadManager_download(blob, url, filename) { + if (navigator.msSaveBlob) { + // IE10 / IE11 + if (!navigator.msSaveBlob(blob, filename)) { this.downloadUrl(url, filename); - return; } + return; + } - var blobUrl = URL.createObjectURL(blob); - download(blobUrl, filename); + if (pdfjsLib.PDFJS.disableCreateObjectURL) { + // URL.createObjectURL is not supported + this.downloadUrl(url, filename); + return; } - }; - exports.DownloadManager = DownloadManager; -} + var blobUrl = URL.createObjectURL(blob); + download(blobUrl, filename); + } +}; + +exports.DownloadManager = DownloadManager; }));