Open Krinkle opened 1 month ago
When the app freezes, there isn't an obvious way to close or reload the tab, and it doesn't respond the "pause" or "reload" buttons from the attached the Safari Web Inspector, either.
However, if you minimise the app and switch to another app for about 5-10 seconds, it will eventually force quit that one tab on its own, and when you switch back, it'll reload that tab. As such, you don't lose your other tabs. It's still a pretty jarring and counter-intuitive experience, though. I was expecting the tab switcher or address bar to still work regardless of some kind of content script misbehaving. And, while I haven't verified this, I suspect if the crash happend on page load, I'd have no way to get out of the loop (short of using Airplane Mode, quiting the app, and then waiting long enough for it to not resume or reload from cache, and then re-opening it and that time closing the problematic app). Perhaps that could use some improvement separately from this bug, such that "mere mortals" can also rid themselves of a crashed tab.
Steps to reproduce
Expected behavior
The input element is removed, and a new input field is inserted and focused.
https://github.com/Krinkle/treasure21/blob/f002bff681cd49d763b47d2b1af5e8e6e2095ae4/public_html/src/ducks.js#L64-L77
Actual behavior
Once the new input is focused, the browser freezes.
Device & build information
Notes
The issue does not happen in:
It appears specific to Firefox on iOS.
I've debugged this over USB in Safari Web Inspector on macOS and noticed that the
dirInputNode.focus();
call (reached once the third character "g" has been entered) goes in to a dozen "Extra Scripts" injected by the firefox-ios app, including variousfocus
andfocusin
handlers.What I know:
dirInputNode.focus();
, and settingdirInputNode.focus = function() {}
, to effectively skip it and any extra scripts listening to focus/focusin, the app does not freeze.dirInputNode.focus();
, and then disabling breakpoints and resuming, the app freezes. Suggesting that it isn't due to a race condition in my own code.┆Issue is synchronized with this Jira Task