let fireKeyEvent = (domId, evtType, keyCode, scp) => { ////iframe window let win = domId ? document.getElementById(domId + "-iframe").contentWindow.window : window; let doc = domId ? document.getElementById(domId + "-iframe").contentWindow.document : document; //浏览器版本 let network = navigator.userAgent.toLowerCase(); let evtObj = null; if (doc.createEvent) { if (win.KeyboardEvent) { evtObj = doc.createEvent("KeyboardEvent"); //(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, //const String &keyIdentifier, unsigned location, //bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) evtObj.initKeyboardEvent( "keydown", true, false, win, "U+005A", //保存密钥的标识符。密钥标识符在附录 A.2“密钥标识符集”中定义。无法识别密钥的实现必须使用密钥标识符"Unidentified"。 0, //0为主键盘;1为左;2为右;3为数字键盘;4为虚拟键盘;5为手柄; false, //ctrl false, false, false, false ); doc.dispatchEvent(evtObj); console.log("evtObj==", evtObj); return; Object.defineProperty(evtObj, "keyCode", { get: function () { return this.keyCodeVal; }, }); Object.defineProperty(evtObj, "which", { get: function () { return this.keyCodeVal; }, }); if ((keyCode === 90 || keyCode === 17) && scp) { evtObj.initKeyboardEvent( evtType, //this will be one of keydown, keypress, or keyup true, //事件是否可以冒泡 false, //Whether or not the event can be canceled win, //在WindowProxy与之关联 false, // false, //此处设置了 altKey true, //此处设置了ctrlKey false, //此处设置了shiftKey,IE中无效。。。 keyCode, 0 ); console.log("evtObj==", evtObj); evtObj.keyCodeVal = keyCode; //evtObj.shiftKey = true; } else { if (network.indexOf("trident") > -1) { //ie处理-_-,少参数报错。。 evtObj.initKeyboardEvent( evtType, true, false, win, false, false, false, false, keyCode, 0 ); evtObj.keyCodeVal = keyCode; } else { evtObj.initKeyboardEvent(evtType, true, true, win, 1); evtObj.keyCodeVal = keyCode; } } if (evtObj.keyCode !== keyCode) { console.log( "keyCode " + evtObj.keyCode + " 和 (" + evtObj.which + ") 不匹配" ); } } else { evtObj = doc.createEvent("UIEvents"); Object.defineProperty(evtObj, "keyCode", { get: function () { return this.keyCodeVal; }, }); Object.defineProperty(evtObj, "which", { get: function () { return this.keyCodeVal; }, }); evtObj.initUIEvent(evtType, true, true, win, 1); evtObj.keyCodeVal = keyCode; if (evtObj.keyCode !== keyCode) { console.log( "keyCode " + evtObj.keyCode + " 和 (" + evtObj.which + ") 不匹配" ); } } doc.dispatchEvent(evtObj); } else if (doc.createEventObject) { evtObj = doc.createEventObject(); evtObj.keyCode = keyCode; doc.fireEvent("on" + evtType, evtObj); } }; const imitateKeyboardEvent = (domId) => { // fireKeyEvent(domId, "keydown", 17, true); fireKeyEvent(domId, "keydown", 90, true); }; export default imitateKeyboardEvent;