123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- 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;
|