diff --git a/libs/horizon/src/event/EventWrapper.ts b/libs/horizon/src/event/EventWrapper.ts index 8f06407c..84f5d844 100644 --- a/libs/horizon/src/event/EventWrapper.ts +++ b/libs/horizon/src/event/EventWrapper.ts @@ -16,7 +16,7 @@ const noop = (): void => {}; // 兼容IE浏览器,无法修改Event属性 export class WrappedEvent { customEventName: string; - nativeEvent: Event; + nativeEvent: AnyNativeEvent; nativeEventType: string; type: string; key: string; @@ -25,12 +25,18 @@ export class WrappedEvent { stopPropagation: () => void; preventDefault: () => void; + // 适配Keyboard键盘事件该函数不能由合成事件调用 + getModifierState?: (keyArgs: string) => boolean; // 适配老版本事件api persist = noop; constructor(customEventName: string, nativeEvtName: string, nativeEvent: AnyNativeEvent) { for (const name in nativeEvent) { this[name] = nativeEvent[name]; + if(name === 'getModifierState') { + const keyBoardEvent = nativeEvent as KeyboardEvent; + this.getModifierState = (keyArg) => keyBoardEvent.getModifierState(keyArg); + } } // stopPropagation和preventDefault 必须通过Event实例调用 this.stopPropagation = () => nativeEvent.stopPropagation(); diff --git a/scripts/__tests__/EventTest/MouseEvent.test.js b/scripts/__tests__/EventTest/MouseEvent.test.js index 030e25de..61895616 100644 --- a/scripts/__tests__/EventTest/MouseEvent.test.js +++ b/scripts/__tests__/EventTest/MouseEvent.test.js @@ -146,5 +146,22 @@ describe('MouseEvent Test', () => { }; test('mouseover',
); }); + + it('KeyboardEvent.getModifierState should not fail', () => { + const input = Horizon.render( { + e.getModifierState('CapsLock'); + }} + />, container); + const event = new MouseEvent('mousedown', { + relatedTarget: null, + bubbles: true, + screenX: 1, + }); + + expect(() => { + input.dispatchEvent(event); + }).not.toThrow(); + }); }); });