Feature #11349
ensure that the web client works on iOS devices (both iPad and iPhone)
0%
History
#1 Updated by Greg Shah 4 months ago
The purpose of this task is to test the FWD web client on iOS devices and fix blocking issues that stop users from using the application. We need to determine which versions of iOS to test/support.
No new capabilities will be implemented in this task. We will only fix issues that stop the existing design from working properly.
#3 Updated by Alexandru Lungu 4 months ago
One very likely issue is that our avoidance of the DOM/HTML controls means that the mobile keyboard support probably will not work. What can we do to solve that?
I would expect to have something similar to the current approach of simulating the clipboard (aka a hidden input). We can programmatically change the focus to it and trigger the keyboard to be displayed. Afterward, we use that input as a general keyboard input place where we listen for events and redirect to server. I did not try this out tho.
#5 Updated by Hynek Cihlar 4 months ago
We already did some preliminary work on mobile browsers support, see #9172. Below are the items needed to be addressed and time efforts (in man hours), #9172 outcomes are included in the estimates.
- Virtual keyboard won't appear - no focusable
<input>element, only<canvas>(8 hrs) - Even if keyboard opens,
keydown/keyupevents may not fire - mobile keyboards useinput/beforeinput/compositionstart/compositionendevents instead (24 hrs) - IME composition (autocorrect, swipe-typing, predictive text) entirely unhandled (32 hrs)
- No
<meta name="viewport">tag - page renders at ~980px width then shrinks to fit, everything appears tiny (2 hrs) - Orientation change handling untested -
window.resizelistener exists but server-side relayout not verified (2 hrs) - No
touchstart/touchmove/touchendlisteners - FWD relies on synthesized mouse events which behave differently (24 hrs) - No right-click mapping -
contextmenurequires long-press which FWD doesn't handle (4 hrs) - No multi-touch support - pinch, zoom, two-finger scroll unhandled (16 hrs)
- Browser default gestures (double-tap zoom, pinch-zoom, pull-to-refresh, swipe-back) interfere with the app since no touch listeners call
preventDefault()(4 hrs) - Modal overlay blocking assumes mouse interaction - touch events may pass through (4 hrs)
- Window drag and resize rely on
mousemovetracking that degrades on touch (16 hrs)
Total: 136 hrs
There are some notable differences between iOS/Safari and Android/Chrome, these could incur additional efforts.
- Virtual keyboard behavior: iOS Safari fires
keydown/keyupmore reliably than Android Chrome for simple keys. Android relies more heavily oninput/compositionendevents. iOS has a different keyboard toolbar (Done/Next buttons) that fires different events. iOS doesn't fireresizewhen the keyboard opens; Android does on some versions. - Touch events: iOS Safari has a ~350ms delay on first touch after page load (first-interaction policy). Safari's
touchmovehandling withpreventDefault()requires{passive: false}explicitly. iOS requires user gesture to play sound, enter fullscreen, or access clipboard - more restrictive than Android. - Viewport/rendering: iOS Safari ignores
viewportwidth values below 320px. Safe area insets (notch, dynamic island) needenv(safe-area-inset-*)CSS on iOS. iOS Safari pinch-zoom cannot be fully disabled with meta viewport alone since iOS 10. - WebSocket: iOS Safari has stricter limits on concurrent WebSocket connections. iOS background tabs aggressively suspend WebSocket connections after ~30 seconds.
- Canvas: iOS Safari has a lower maximum canvas size limit (~16 megapixels) compared to Android Chrome. iOS may purge large canvases under memory pressure without warning.
Additional effort for cross-platform testing and iOS-specific fixes: 16-24 man hours, mostly in keyboard and viewport areas.