feat: Notify JS-layer when webview crashed
See original GitHub issueFeature Request
It would be great if the JS-layer (Capacitor app) could know that the underlying web view crashed and subsequently restarted. Right now there is nothing to discern these from a regular app startup and users won’t be aware that data was lost.
More concretely, an issue that occur frequently is that we take a photograph via an <input capture>
element and do on-the-fly resize using JS and canvas, and the web view crashes, causing the page to reload. But for the user this isn’t obvious, it’s just a short flash when the web view reloads, and they don’t know that the photograph failed and they’ve just lost data.
If we could listen to these events we could show a warning to the user.
This is the code on iOS today:
Platform Support Requested
- Android
- iOS
Describe Preferred Solution
There are multiple solutions, but one could be a listener similar to appRestoredResult
, that would let us know that the app restored after a crash.
We’d then have the ability to show a warning to the user.
Additional Context
This related issue about the web view crashing when taking photos: https://github.com/ionic-team/capacitor/issues/2265
Issue Analytics
- State:
- Created 4 years ago
- Reactions:14
- Comments:16 (9 by maintainers)
We have found the iOS WebView to be very sensitive to memory usage. It crashes quite often on startup, possibly due to this bug: https://bugs.webkit.org/show_bug.cgi?id=212790. If you have any memory leaks in the WebView, it will eventually be terminated. WebKit unfortunately has some nasty memory leaks associated with the
<video>
and<canvas>
elements.In general, an automatic reload is necessary in production. But I would prefer a crash in development. And ideally, we should be able to override the default behaviour, so we can maintain the integrity of the app.
Would it be so crazy to crash the app if
webViewWebContentProcessDidTerminate
was called? I think I would prefer the app to quit immediately and obviously, rather than data disappearing silently. Perhaps it could be a configuration option.