imitateKeyboardEvent.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. let fireKeyEvent = (domId, evtType, keyCode, scp) => {
  2. ////iframe window
  3. let win = domId
  4. ? document.getElementById(domId + "-iframe").contentWindow.window
  5. : window;
  6. let doc = domId
  7. ? document.getElementById(domId + "-iframe").contentWindow.document
  8. : document;
  9. //浏览器版本
  10. let network = navigator.userAgent.toLowerCase();
  11. let evtObj = null;
  12. if (doc.createEvent) {
  13. if (win.KeyboardEvent) {
  14. evtObj = doc.createEvent("KeyboardEvent");
  15. //(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
  16. //const String &keyIdentifier, unsigned location,
  17. //bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey)
  18. evtObj.initKeyboardEvent(
  19. "keydown",
  20. true,
  21. false,
  22. win,
  23. "U+005A", //保存密钥的标识符。密钥标识符在附录 A.2“密钥标识符集”中定义。无法识别密钥的实现必须使用密钥标识符"Unidentified"。
  24. 0, //0为主键盘;1为左;2为右;3为数字键盘;4为虚拟键盘;5为手柄;
  25. false, //ctrl
  26. false,
  27. false,
  28. false,
  29. false
  30. );
  31. doc.dispatchEvent(evtObj);
  32. console.log("evtObj==", evtObj);
  33. return;
  34. Object.defineProperty(evtObj, "keyCode", {
  35. get: function () {
  36. return this.keyCodeVal;
  37. },
  38. });
  39. Object.defineProperty(evtObj, "which", {
  40. get: function () {
  41. return this.keyCodeVal;
  42. },
  43. });
  44. if ((keyCode === 90 || keyCode === 17) && scp) {
  45. evtObj.initKeyboardEvent(
  46. evtType, //this will be one of keydown, keypress, or keyup
  47. true, //事件是否可以冒泡
  48. false, //Whether or not the event can be canceled
  49. win, //在WindowProxy与之关联
  50. false, //
  51. false, //此处设置了 altKey
  52. true, //此处设置了ctrlKey
  53. false, //此处设置了shiftKey,IE中无效。。。
  54. keyCode,
  55. 0
  56. );
  57. console.log("evtObj==", evtObj);
  58. evtObj.keyCodeVal = keyCode;
  59. //evtObj.shiftKey = true;
  60. } else {
  61. if (network.indexOf("trident") > -1) {
  62. //ie处理-_-,少参数报错。。
  63. evtObj.initKeyboardEvent(
  64. evtType,
  65. true,
  66. false,
  67. win,
  68. false,
  69. false,
  70. false,
  71. false,
  72. keyCode,
  73. 0
  74. );
  75. evtObj.keyCodeVal = keyCode;
  76. } else {
  77. evtObj.initKeyboardEvent(evtType, true, true, win, 1);
  78. evtObj.keyCodeVal = keyCode;
  79. }
  80. }
  81. if (evtObj.keyCode !== keyCode) {
  82. console.log(
  83. "keyCode " + evtObj.keyCode + " 和 (" + evtObj.which + ") 不匹配"
  84. );
  85. }
  86. } else {
  87. evtObj = doc.createEvent("UIEvents");
  88. Object.defineProperty(evtObj, "keyCode", {
  89. get: function () {
  90. return this.keyCodeVal;
  91. },
  92. });
  93. Object.defineProperty(evtObj, "which", {
  94. get: function () {
  95. return this.keyCodeVal;
  96. },
  97. });
  98. evtObj.initUIEvent(evtType, true, true, win, 1);
  99. evtObj.keyCodeVal = keyCode;
  100. if (evtObj.keyCode !== keyCode) {
  101. console.log(
  102. "keyCode " + evtObj.keyCode + " 和 (" + evtObj.which + ") 不匹配"
  103. );
  104. }
  105. }
  106. doc.dispatchEvent(evtObj);
  107. } else if (doc.createEventObject) {
  108. evtObj = doc.createEventObject();
  109. evtObj.keyCode = keyCode;
  110. doc.fireEvent("on" + evtType, evtObj);
  111. }
  112. };
  113. const imitateKeyboardEvent = (domId) => {
  114. // fireKeyEvent(domId, "keydown", 17, true);
  115. fireKeyEvent(domId, "keydown", 90, true);
  116. };
  117. export default imitateKeyboardEvent;