在 Firefox 插件中模拟击键

Fil*_*lva 6 javascript firefox firefox-addon dom-events

我希望能够从我的 firefox-addon 模拟击键,但目前我无法做到这一点。

我找到了这篇文章Whysimulation of Left Arrow + Shift key does not work in Firefox? 我的代码几乎是一样的,但它只做了焦点部分,而不是dispatchEvent。知道为什么会发生这种情况吗?

这是代码:

objTag.focus();
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keydown', true, true, window, false, false, false, false, 35, 0);
objTag.dispatchEvent(e);
Run Code Online (Sandbox Code Playgroud)

Wla*_*ant 2

您的代码是正确的,但<textarea>元素对keypress事件做出反应,而不是keydown.

无论如何,为什么这么复杂?您只需设置input.value然后使用input.setSelectionRange()方法即可适当移动光标。如果你想在当前行的末尾添加一些内容,你可以这样做:

var position = objTag.selectionStart;
var lineEnd = objTag.value.indexOf("\n", position);
if (lineEnd < 0) // No more line breaks
  lineEnd = objTag.value.length;

var textToAdd = "foo";
objTag.value = objTag.value.substr(0, lineEnd) + textToAdd + objTag.value.substr(lineEnd);
objTag.setSelectionRange(lineEnd + textToAdd.length, lineEnd + textToAdd.length);
objTag.focus();
Run Code Online (Sandbox Code Playgroud)

添加到文本末尾就更简单了:

var textToAdd = "foo";
objTag.value += textToAdd;
objTag.setSelectionRange(objTag.value.length, objTag.value.length);
objTag.focus();
Run Code Online (Sandbox Code Playgroud)