Chrome 扩展如何在任何选定的文本字段中输入文本
Chrome extension how to enter text in any selected text field
我正在制作一个 Chrome 扩展程序,当您按下 Ctrl+Shift+U 时它会生成昵称,如果选择了一个,它应该会自动在选定的文本字段中输入生成的名称。我的问题是有很多类型的文本字段,最基本的是输入。这是我目前生成昵称的函数,它适用于输入字段和文本区域字段,但除此之外别无他用。
//Nickname gets generated here
//...
var inp = document.querySelectorAll("input");
var txt = document.querySelectorAll("textarea");
for (var i=0;i<inp.length;i++) {
if (inp[i] == document.activeElement) {
inp[i].value = nick;
}
}
for (var i=0;i<txt.length;i++) {
console.log(txt[i]);
if (txt[i] == document.activeElement) {
txt[i].innerHTML = nick;
}
}
基本上,我认为我需要的是某种功能,它可以像用户输入名称一样工作,而无需直接更改字段的值。
感谢 wOxxOm 的回答,稍微修改一下,我就可以使用了。这是我的最终代码:
//Nickname gets generated here
//...
const keyboardEventInit = {bubbles:false, cancelable:false, composed:false, key:'', code:'', location:0};
const element = document.activeElement;
if (element) {
element.dispatchEvent(new KeyboardEvent("keydown", keyboardEventInit));
element.value = nick;
element.dispatchEvent(new KeyboardEvent("keyup", keyboardEventInit));
element.dispatchEvent(new Event('change', {bubbles: true}));
}
我正在制作一个 Chrome 扩展程序,当您按下 Ctrl+Shift+U 时它会生成昵称,如果选择了一个,它应该会自动在选定的文本字段中输入生成的名称。我的问题是有很多类型的文本字段,最基本的是输入。这是我目前生成昵称的函数,它适用于输入字段和文本区域字段,但除此之外别无他用。
//Nickname gets generated here
//...
var inp = document.querySelectorAll("input");
var txt = document.querySelectorAll("textarea");
for (var i=0;i<inp.length;i++) {
if (inp[i] == document.activeElement) {
inp[i].value = nick;
}
}
for (var i=0;i<txt.length;i++) {
console.log(txt[i]);
if (txt[i] == document.activeElement) {
txt[i].innerHTML = nick;
}
}
基本上,我认为我需要的是某种功能,它可以像用户输入名称一样工作,而无需直接更改字段的值。
感谢 wOxxOm 的回答,稍微修改一下,我就可以使用了。这是我的最终代码:
//Nickname gets generated here
//...
const keyboardEventInit = {bubbles:false, cancelable:false, composed:false, key:'', code:'', location:0};
const element = document.activeElement;
if (element) {
element.dispatchEvent(new KeyboardEvent("keydown", keyboardEventInit));
element.value = nick;
element.dispatchEvent(new KeyboardEvent("keyup", keyboardEventInit));
element.dispatchEvent(new Event('change', {bubbles: true}));
}