fix: false offline screen from unreliable navigator.onLine - #1877
Merged
Gauravjeetsingh merged 2 commits intoAug 7, 2026
Merged
Conversation
Some users (seen in Chrome) get navigator.onLine === false while actually connected, which permanently pinned the app on the offline screen — the online event only fires on a transition, so a false initial value never self-corrected. - Start optimistic (store online: true) instead of trusting navigator.onLine. - On mount, only if navigator.onLine reports offline, confirm with a real same-origin request (verify-online util) and set online from the result. - Verify the offline event the same way before showing the offline screen.
Gauravjeetsingh
requested changes
Aug 5, 2026
| const controller = new AbortController(); | ||
| const timer = setTimeout(() => controller.abort(), timeoutMs); | ||
| try { | ||
| await fetch(`/favicon.ico?_=${Date.now()}`, { |
Collaborator
There was a problem hiding this comment.
This might give us false positive. How about using the health endpoint in the app, or use the one provided in API?
And returning value based on an actual response, instead of just a request completion.
Contributor
Author
There was a problem hiding this comment.
Yes, I updated it to ping banidb/health endpoint
Address review: the favicon HEAD only proved *a* request completed (a captive portal, a same-origin SPA fallback, or a 4xx/5xx all returned true). Probe the banidb API /health endpoint the app actually depends on and return response.ok, so a real 2xx from the backend is required to consider the app online.
Gauravjeetsingh
approved these changes
Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Some users (seen in Chrome) get navigator.onLine === false while actually connected, which permanently pinned the app on the offline screen — the online event only fires on a transition, so a false initial value never self-corrected.