diff --git a/src/core/worker.js b/src/core/worker.js index 3be1cb026..24ef3f9ab 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -230,6 +230,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { PDFJS.maxImageSize = data.maxImageSize === undefined ? -1 : data.maxImageSize; PDFJS.disableFontFace = data.disableFontFace; + PDFJS.disableCreateObjectURL = data.disableCreateObjectURL; PDFJS.verbosity = data.verbosity; getPdfManager(data).then(function pdfManagerReady() { diff --git a/src/display/api.js b/src/display/api.js index 5c3e16198..d728eeed1 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -94,6 +94,13 @@ PDFJS.pdfBug = PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug; PDFJS.postMessageTransfers = PDFJS.postMessageTransfers === undefined ? true : PDFJS.postMessageTransfers; +/** + * Disables URL.createObjectURL usage. + * @var {boolean} + */ +PDFJS.disableCreateObjectURL = PDFJS.disableCreateObjectURL === undefined ? + false : PDFJS.disableCreateObjectURL; + /** * Controls the logging level. * The constants from PDFJS.VERBOSITY_LEVELS should be used: @@ -883,6 +890,7 @@ var WorkerTransport = (function WorkerTransportClosure() { disableRange: PDFJS.disableRange, maxImageSize: PDFJS.maxImageSize, disableFontFace: PDFJS.disableFontFace, + disableCreateObjectURL: PDFJS.disableCreateObjectURL, verbosity: PDFJS.verbosity }); }, diff --git a/src/shared/util.js b/src/shared/util.js index 94a6cac9b..9ba98aa4d 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -1179,18 +1179,17 @@ PDFJS.createBlob = function createBlob(data, contentType) { }; PDFJS.createObjectURL = (function createObjectURLClosure() { - if (typeof URL !== 'undefined' && URL.createObjectURL) { - return function createObjectURL(data, contentType) { - var blob = PDFJS.createBlob(data, contentType); - return URL.createObjectURL(blob); - }; - } - // Blob/createObjectURL is not available, falling back to data schema. var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; return function createObjectURL(data, contentType) { + if (!PDFJS.disableCreateObjectURL && + typeof URL !== 'undefined' && URL.createObjectURL) { + var blob = PDFJS.createBlob(data, contentType); + return URL.createObjectURL(blob); + } + var buffer = 'data:' + contentType + ';base64,'; for (var i = 0, ii = data.length; i < ii; i += 3) { var b1 = data[i] & 0xFF; diff --git a/web/compatibility.js b/web/compatibility.js index 8ca68137f..433e617af 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -442,6 +442,14 @@ if (typeof PDFJS === 'undefined') { } })(); +// Checks if possible to use URL.createObjectURL() +(function checkOnBlobSupport() { + // sometimes IE loosing the data created with createObjectURL(), see #3977 + if (navigator.userAgent.indexOf('Trident') >= 0) { + PDFJS.disableCreateObjectURL = true; + } +})(); + // Checks if navigator.language is supported (function checkNavigatorLanguage() { if ('language' in navigator)