diff --git a/src/core/drive/navigator.ts b/src/core/drive/navigator.ts index 80678fdf6..935f9eea7 100644 --- a/src/core/drive/navigator.ts +++ b/src/core/drive/navigator.ts @@ -110,7 +110,7 @@ export class Navigator { if (fetchResponse.serverError) { await this.view.renderError(snapshot, this.currentVisit) } else { - await this.view.renderPage(snapshot, this.currentVisit || null, false, true) + await this.view.renderPage(snapshot, false, true, this.currentVisit) } this.view.scrollToTop() this.view.clearSnapshotCache() diff --git a/src/core/drive/page_view.ts b/src/core/drive/page_view.ts index 99bd50973..042ea748e 100644 --- a/src/core/drive/page_view.ts +++ b/src/core/drive/page_view.ts @@ -15,10 +15,13 @@ type PageViewRenderer = PageRenderer | ErrorRenderer export class PageView extends View { readonly snapshotCache = new SnapshotCache(10) lastRenderedLocation = new URL(location.href) + forceReloaded = false - renderPage(snapshot: PageSnapshot, visit: Visit | null, isPreview = false, willRender = true) { + renderPage(snapshot: PageSnapshot, isPreview = false, willRender = true, visit?: Visit) { const renderer = new PageRenderer(this.snapshot, snapshot, isPreview, willRender) - if (renderer.shouldRender) { + if (!renderer.shouldRender) { + this.forceReloaded = true + } else { visit?.changeHistory() } return this.render(renderer) diff --git a/src/core/drive/visit.ts b/src/core/drive/visit.ts index 14a13117d..abc9a0c15 100644 --- a/src/core/drive/visit.ts +++ b/src/core/drive/visit.ts @@ -228,8 +228,7 @@ export class Visit implements FetchRequestDelegate { this.cacheSnapshot() if (this.view.renderPromise) await this.view.renderPromise if (isSuccessful(statusCode) && responseHTML != null) { - await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), this, false, this.willRender) - this.performScroll() + await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this) this.adapter.visitRendered(this) this.complete() } else { @@ -271,8 +270,7 @@ export class Visit implements FetchRequestDelegate { this.adapter.visitRendered(this) } else { if (this.view.renderPromise) await this.view.renderPromise - await this.view.renderPage(snapshot, this, isPreview, this.willRender) - this.performScroll() + await this.view.renderPage(snapshot, isPreview, this.willRender, this) this.adapter.visitRendered(this) if (!isPreview) { this.complete() @@ -297,7 +295,6 @@ export class Visit implements FetchRequestDelegate { if (this.isSamePage) { this.render(async () => { this.cacheSnapshot() - this.performScroll() this.adapter.visitRendered(this) }) } @@ -432,6 +429,9 @@ export class Visit implements FetchRequestDelegate { }) await callback() delete this.frame + if (!this.view.forceReloaded) { + this.performScroll() + } } cancelRender() {