diff --git a/src/api.js b/src/api.js index 902075d43..9285606a9 100644 --- a/src/api.js +++ b/src/api.js @@ -852,7 +852,7 @@ var InternalRenderTask = (function InternalRenderTaskClosure() { cancel: function InternalRenderTask_cancel() { this.running = false; this.cancelled = true; - this.callback(); + this.callback('cancelled'); }, operatorListChanged: function InternalRenderTask_operatorListChanged() { diff --git a/web/viewer.js b/web/viewer.js index d1b01ff00..3e2ca141d 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1560,7 +1560,6 @@ var PageView = function pageView(container, id, scale, this.update = function pageViewUpdate(scale, rotation) { if (this.renderTask) { this.renderTask.cancel(); - this.renderTask = null; } this.resume = null; this.renderingState = RenderingStates.INITIAL; @@ -1828,8 +1827,18 @@ var PageView = function pageView(container, id, scale, var self = this; function pageViewDrawCallback(error) { + // The renderTask may have been replaced by a new one, so only remove the + // reference to the renderTask if it matches the one that is triggering + // this callback. + if (renderTask === self.renderTask) { + self.renderTask = null; + } + + if (error === 'cancelled') { + return; + } + self.renderingState = RenderingStates.FINISHED; - self.renderTask = null; if (self.loadingIconDiv) { div.removeChild(self.loadingIconDiv); @@ -1890,7 +1899,7 @@ var PageView = function pageView(container, id, scale, cont(); } }; - this.renderTask = this.pdfPage.render(renderContext); + var renderTask = this.renderTask = this.pdfPage.render(renderContext); this.renderTask.then( function pdfPageRenderCallback() {