diff --git a/web/src/app/browser/src/keymanEngine.ts b/web/src/app/browser/src/keymanEngine.ts index 69281370d29..1797cfae6c4 100644 --- a/web/src/app/browser/src/keymanEngine.ts +++ b/web/src/app/browser/src/keymanEngine.ts @@ -71,7 +71,9 @@ export default class KeymanEngine extends KeymanEngineBase) => { const e = target?.getElement(); - (this.osk.activationModel as TwoStateActivator).activationTrigger = e; + if(this.osk) { + (this.osk.activationModel as TwoStateActivator).activationTrigger = e; + } if(this.config.hostDevice.touchable) { if(!e || !target || !this.osk) { diff --git a/web/src/engine/osk/src/views/floatingOskView.ts b/web/src/engine/osk/src/views/floatingOskView.ts index 7748d463b83..af8a9655f91 100644 --- a/web/src/engine/osk/src/views/floatingOskView.ts +++ b/web/src/engine/osk/src/views/floatingOskView.ts @@ -31,7 +31,7 @@ export default class FloatingOSKView extends OSKView { dfltX: string; dfltY: string; - layoutSerializer = new FloatingOSKCookieSerializer(); + private layoutSerializer = new FloatingOSKCookieSerializer(); private titleBar: TitleBar; private resizeBar: ResizeBar; @@ -220,6 +220,15 @@ export default class FloatingOSKView extends OSKView { * @return {boolean} */ private loadPersistedLayout(): void { + /* + If a keyboard is available during OSK construction, it is possible + for this field to be `undefined`. `loadPersistedLayout` will be called + later in construction, so it's safe to skip. + */ + if(!this.layoutSerializer) { + return; + } + let c = this.layoutSerializer.loadWithDefaults({ visible: 1, userSet: 0,