From 32b0e00ba7e0635a224041a7e00c28e40c04b4e2 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 6 Jan 2021 14:43:05 +0100 Subject: [PATCH] Don't dispatch "pageclose" events if a "pageopen" wasn't dispatched for the page (PR 12747 follow-up) Given that "pageopen" events are not guaranteed to occur, if the page becomes inactive *before* it finishes rendering, we should probably also avoid dispatching a "pageclose" event in that case to avoid confusing/inconsistent state in any event handlers. --- web/base_viewer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/base_viewer.js b/web/base_viewer.js index 0103797ba..c4a2e8103 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -1517,6 +1517,9 @@ class BaseViewer { const { eventBus } = this; const dispatchPageClose = pageNumber => { + if (this._pageOpenPendingSet?.has(pageNumber)) { + return; // No "pageopen" event was dispatched for the previous page. + } eventBus.dispatch("pageclose", { source: this, pageNumber }); }; const dispatchPageOpen = (pageNumber, force = false) => { @@ -1542,10 +1545,7 @@ class BaseViewer { }); eventBus._on("pagerendered", ({ pageNumber }) => { - if (!this._pageOpenPendingSet) { - return; // No pending "pageopen" events. - } - if (!this._pageOpenPendingSet.has(pageNumber)) { + if (!this._pageOpenPendingSet?.has(pageNumber)) { return; // No pending "pageopen" event for the newly rendered page. } if (pageNumber !== this._currentPageNumber) {