diff --git a/web/viewer.js b/web/viewer.js index 4ec85b5d7..565a8ad29 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1486,19 +1486,12 @@ var PDFView = { }, navigateTo: function pdfViewNavigateTo(dest) { + var destString = ''; var self = this; - PDFJS.Promise.all([this.pagesPromise, - this.destinationsPromise]).then(function() { - var destString = ''; - if (typeof dest === 'string') { - destString = dest; - dest = self.destinations[dest]; - } - if (!(dest instanceof Array)) { - return; // invalid destination - } + + var goToDestination = function(destRef) { + self.pendingRefStr = null; // dest array looks like that: - var destRef = dest[0]; var pageNumber = destRef instanceof Object ? self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1); @@ -1511,7 +1504,24 @@ var PDFView = { // Update the browsing history. PDFHistory.push({ dest: dest, hash: destString, page: pageNumber }); + } else { + self.pendingRefStrLoaded = new PDFJS.Promise(); + self.pendingRefStr = destRef.num + ' ' + destRef.gen + ' R'; + self.pendingRefStrLoaded.then(function() { + goToDestination(destRef); + }); } + }; + + this.destinationsPromise.then(function() { + if (typeof dest === 'string') { + destString = dest; + dest = self.destinations[dest]; + } + if (!(dest instanceof Array)) { + return; // invalid destination + } + goToDestination(dest[0]); }); }, @@ -1746,6 +1756,10 @@ var PDFView = { var pageRef = pdfPage.ref; var refStr = pageRef.num + ' ' + pageRef.gen + ' R'; pagesRefMap[refStr] = pdfPage.pageNumber; + + if (self.pendingRefStr && self.pendingRefStr === refStr) { + self.pendingRefStrLoaded.resolve(); + } }); pagePromises.push(pagePromise); }